SELECT 系统调用

I/O复用

nfds是制定被监听的文件描述符的总数,通常被设置为最大文件描述符值+1(因为文件描述符从0开始)

readfds,writefds,execeptfds分别指向可读,可写,异常事件对应的文件描述符;

fd_set结构体:

I/O复用

fd_set结构体只有一个整形数组,该数组的每个元素的每个位存放一个文件描述符;

FD_SETSIZEfd_set能容纳的文件描述符的总量,也是select能同时处理的文件描述符个数;


I/O复用

timeout参数是timeval的结构体指针;

timeval结构体如下:

I/O复用

如果tv_sectv_usec0select立即返回,timeout传值为NULL则一直阻塞;

select返回值:

成功时返回文件描述符的总量,超时时间内没有文件描述符就绪返回0,失败时返回-1

pool系统调用

I/O复用

fdspoolfd结构体指针;

I/O复用

I/O复用

I/O复用

nfds指定监听事件fds的大小;


I/O复用

timeout指定poll超时值,为-1时将永远阻塞,为0立即返回;

poll返回值:

成功时返回文件描述符的总量,超时时间内没有文件描述符就绪返回0,失败时返回-1

epoll系统调用

epoll用一组函数来操作,并且把用户关心的文件描述符上的事件放在内核事件表中,而不像selectpoll每次调用都要传入文件描述符集或事件集;epoll需要一个描述符来唯一标识内核中的事件表;

创建该描述符:

I/O复用

size是时间表的大小;

I/O复用

event是结构体指针;

I/O复用

I/O复用

epoll_data共用体中使用最多的是fd

epoll_ctl成功时返回0失败返回-1并设置errno

epfd是那个创建的标识事件表的文件描述符

epoll_wait函数:

在一段超时时间内等待一组文件描述符上的事件;

I/O复用

epfd同上;events是一个结构体指针,用来存放epfd从事件表中复制的事件信息,该数组用来输出epoll_wait检测到的就绪事件;

selectpoll的数组既传入用户注册的事件,又输出内核检测到的就绪事件;

maxevent指定监听事件的个数,必须大于0

timeout超时时间;

三组IO复用函数的比较

I/O复用

相关文章:

  • 2021-05-27
  • 2021-05-23
  • 2021-04-11
  • 2021-09-30
  • 2021-10-10
  • 2022-02-14
  • 2021-12-24
  • 2021-12-04
猜你喜欢
相关资源
相似解决方案