select函数

本文深入解析了select函数的使用方法及原理,包括如何通过内核监听客户端连接和数据通信事件。详细介绍了select函数的参数含义,如监听描述符集合的清空、添加、移除和检查操作,以及如何设置监听超时。同时,探讨了select的优点和局限性,如跨平台性和文件描述符数量限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

select多路IO转接
1.原理:借助内核,select监听,客户端连接,数据通信事件
2.#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);

   void FD_CLR(int fd, fd_set *set);
   int  FD_ISSET(int fd, fd_set *set);
   void FD_SET(int fd, fd_set *set);
   void FD_ZERO(fd_set *set);

①void FD_ZERO(fd_set *set) ------清空一个描述符集合
fd_set rset;
FD_ZERO(&rset);
②void FD_SET(int fd, fd_set *set) -------将待监听的文件描述符,添加到监听集合中
FD_SET(3, &rset);
FD_SET(12, &rset);
FD_SET(4, &rset);
③void FD_CLR(int fd, fd_set *set);------将一个文件描述符从监听集合中移除
FD_CLR(4,&rset);
④int FD_ISSET(int fd, fd_set *set);-----判断一个文件描述符是否在监听集合中
FD_ISSET(3,&rset)
⑤ int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
nfds:监听的所有文件描述符中,最大的描述符+1
readfds:读 文件描述符监听集合 传入传出参数
writefds: 写 文件描述符监听集合 NULL 传入传出参数
exceptfds:异常 文件描述符监听集合 NULL 传入传出参数
timeout:>0 设置监听超时时长
NULL:阻塞监听
0:非阻塞监听,轮询
返回值:>0:所有监听集合中,满足对应事件的总数
0:没有满足监听事件的文件描述符
-1:error

在这里插入图片描述
select优缺点:
缺点:①监听上限受文件描述符限制,最大1024②检测条件满足的fd,自己添加业务逻辑提高小,提高了编码难度
优点:①跨平台完成文件描述符监听

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值