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成员,就能找到是哪个事件产生的触发!!!

猜你喜欢

转载自www.cnblogs.com/646087666-lxd/p/12461433.html