功能:
阻塞函数,让内核监测集合中是否有文件描述符准备就 绪。若有准备就绪,则select函 数解除阻塞; select函数解除阻塞后,则集合中会只剩下产生事件的文件描述符 例如0准备就绪,则集合中只剩下0 若sfd准备就绪,则集合中只剩下sfd; 若0和sfd均就绪,则集合中0和sfd均被保留 所以只需要判断集合中剩下哪个文件描述符,走对应处理函数即可。
原型:
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
参数: int nfds:三个集合中最大的文件描述符编号+1;
fd_set *readfds, fd_set *writefds, fd_set *exceptfds:读集合,写集合,其他集合。 若用不上,则填NULL;
struct timeval *timeout:超时时间。若不设置超时时间,则填NULL,一直阻塞直到有事件产生,解除阻塞。 struct timeval { long tv_sec; /* seconds */ long tv_usec; /* microseconds */ };
返回值: >0, 三个集合中成功触发事件的文件描述符个数;
=0, 超时了
=-1,失败,同时更新errno;
select函数及其TCP服务器模型(C语言)
最新推荐文章于 2024-01-27 10:58:36 发布
本文介绍了C语言中select函数的工作原理,它作为阻塞函数用于监测文件描述符集合,当有描述符准备就绪时解除阻塞。通过分析返回值和操作集合的函数,如FD_CLR、FD_ISSET、FD_SET和FD_ZERO,可以实现TCP服务器模型,处理读写事件。此外,还提及了超时时间和TCP网络协议的相关应用。
摘要由CSDN通过智能技术生成