Linux-应用程序中的poll机制
Posted 卢老师
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux-应用程序中的poll机制相关的知识,希望对你有一定的参考价值。
应用程序中的poll机制
poll机制表现为文件操作接口函数!
在设备驱动中已经提供了poll接口函数,当应用程序需要同时操作多个设备时,调用设备驱动中提供的poll接口,同步管理,同步操作即可!
poll机制在应用层有接口函数存在!在应用层封装了两个poll接口函数: poll()、 select()。
这两个接口函数都是用来调用设备驱动中的poll接口函数的,功能相同。仅仅是用法上有些区别!
poll();
函数原型:int poll(struct pollfd* fds, nfds_t nfds, int timeout);
函数功能:把要同时操作的事件用fds结构体数组管理起来,一起阻塞等待。
等待有事件触发,阻塞消失,程序继续向下运行。
形参列表:
fds:事件结构体数组 -- 存放所有需要同步操作的事件
nfds:数组元素个数 -- 要同步管理的事件个数
timeout:设置阻塞等待的时间上限(负数:无限阻塞)《单位:ms》
返回值:
有事件触发:触发事件的个数
超时时间到:0
失败:-1
在使用poll()同步管理多个事件时,每一个事件都需要用事件结构体来描述!
事件结构体:struct pollfd
struct pollfd {
int fd; /* 文件描述符 */
short events; /* 事件类型 */
short revents; /* 事件返回类型 */
};
备注:revents成员变量是一个输出参数。
当poll()被触发,阻塞消失,poll()同步管理的所有事件都会返回,返回值存放在revents成员中。
这时:触发事件将返回触发事件类型,未触发事件将返回0。
通过判断每一个事件结构体的revents成员,就能找到是哪个事件产生的触发!!!
以上是关于Linux-应用程序中的poll机制的主要内容,如果未能解决你的问题,请参考以下文章