上一节分析了系统调用函数的封装,这一节我们学习一下poll系统调用函数。就从最开始的sys_poll开始。
在开始之前我们先了解一下poll函数的作用。
使用下面命令查看poll的使用方法和作用可知
man 2 poll
官方的解释是:poll函数是用来,等待一组文件描述符中的一个准备好执行 I / O
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
函数原型如上所示
其中第一个结构体指针代表这个文件描述符,第二个参数代表文件的数量(上面说了是一组文件描述符),第三个参数,代表等待超时自动唤醒时间。
官网的解释说的太拗口,这用白话解释一下,poll函数可以等待多个文件描述符(该进程open打开的多个文件),如果要继续执行某个操作,必须要先得到IO,否则就睡眠,但这里的睡眠可以设置睡眠时间限制,即如果在设定时间到来之前还没有发生该事件,则时间到后会自动唤醒。其中因为可以设置多个文件描述符的等待事件,这里只要等到一个文件描述符的事件,则就会立刻返回。
在这里我先列出代码,后面