【学习笔记】select函数

本文详细介绍了select函数及其相关宏的功能和使用方法。通过介绍FD_CLR、FD_ISSET、FD_SET和FD_ZERO等宏,展示了如何利用这些宏进行文件描述符的管理和测试。同时,还讲解了select函数的返回值及timeout参数的设定。

select原型:

int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);

select函数可以使用各种套接字宏来控制IO。

FD_CLR(int fd, fd_set *set);
clear–将文件描述符从集合set中移除。
FD_ISSET(int fd, fd_set *set);
检测fd是否在集合内,是 返回真。
FD_SET(int fd, fd_set *set);
加入集合。
FD_ZERO(fd_set *set);
清理整个集合使其不含任何描述符。

select提供了一个结构体:fd_set.
通常为一个小于等于32位的描述符,由FD_SETSIZE决定。

使用select函数的过程一般是:

先调用宏FD_ZERO将指定的fd_set清零,然后调用宏FD_SET将需要测试的fd加入fd_set,接着调用函数select测试fd_set中的所有fd,最后用宏FD_ISSET检查某个fd在函数select调用后,相应位是否仍然为1。

select return值:
-1 select error
0 select time out
1 success

timeout 使用的结构体

struct timeval {
               long    tv_sec;         /* seconds */
               long    tv_usec;        /* microseconds */
           };

       and

           struct timespec {
               long    tv_sec;         /* seconds */
               long    tv_nsec;        /* nanoseconds */
           };

设定2.5秒

timeout.tv_sec = 2;
timeout.tv_usec = 500000; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值