系统调用(用户空间) 驱动(内核空间)
open open
close Release
read write
ioctl ioctl
lseek llseek
select poll
select系统调用:用于多路监控,当没有一个文件满足要求时,select将阻塞调用进程。
int select(maxfd, *reasfds, *writefds, *exceptfds, *timeout)
timeout:为0
不管是否有文件满足要求,都立即返回,无文件满足要求返回0,有文件满足要求返回一个正值。
timeout为NULL
select将阻塞进程,直到某个文件满足要求
timeout值为正整数
就是等待的最长时间,即select在timeout时间内阻塞进程。
返回值:
1、正常情况下返回满足要求的文件描述符个数
2、经过了timeout等待后仍无文件满足要去,返回值为0
3、如果select被某个信号中断,它将返回-1并设置errno为EINTR
4、如果出错,返回-1并设置相应的errno
使用方法:
1、将要监控的文件添加到文件描述符集
2、调用select开始监控
3、判断文件是否发生变化
poll方法
1、使用poll_wait将等待队列添加到poll_table中。
2、返回描述设备是否可读或可写的掩码。
掩码:
POLLIN 设备可读
POLLRDNORM 数据可读
POLLOUT 设备可写
POLLWRNORM 数据可写
poll只是做一个登记,真正阻塞发生在select.c 中的do_select