栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux非阻塞

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux非阻塞

Select:

入口参数,最大文件描述符+1,文件描述符集,时间结构体,有监视最大数量限值1024。

fd_set readfds;
struct timeval timeout;

while (1) {	
		FD_ZERO(&readfds);
		FD_SET(fd, &readfds);
		timeout.tv_sec = 0;    
		timeout.tv_usec = 500000; 
		ret = select(fd + 1, &readfds, NULL, NULL, &timeout);
		switch (ret) {
			case 0: 	
				break;
			case -1:	
				break;
            .....
			default:	break;
}

timeout为空,阻塞运行;timeout为0,非阻塞运行;具体值则等待;

select函数的非阻塞应用select

poll(用户):

fds为pollfd数组指针,无数量限值。nfds为监视文件数目。

int poll(struct pollfd *fds,  nfds_t nfds,  int timeout)

struct pollfd {
    int fd; 
    short events; 
    short revents; 
};

fd 是要监视的文件描述符,如果 fd 无效的话那么 events 监视事件也就无效,并且 revents
返回 0。

events 是要监视的事件,可监视的事件类型如下所示:
    POLLIN 有数据可以读取。
    POLLPRI 有紧急的数据需要读取。
    POLLOUT 可以写数据。
    POLLERR 指定的文件描述符发生错误。
    POLLHUP 指定的文件描述符挂起。
    POLLNVAL 无效的请求。
    POLLRDNORM 等同于 POLLIN
    revents 是返回参数,也就是返回的事件,由 Linux 内核设置具体的返回事件。
 poll(驱动):

是file_operations的成员,为文件基本操作函数。

unsigned int imx6uirq_poll(struct file *filp, struct poll_table_struct *wait)
{
	unsigned int mask = 0;
	struct imx6uirq_dev *dev = (struct imx6uirq_dev *)filp->private_data;
	poll_wait(filp, &dev->r_wait, wait);	
	if(XXX)) {		
		mask = POLLIN | POLLRDNORM;			
	}
	return mask;
}

 Select、Poll、Epoll详解 - 简书

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/342067.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号