fd_set与select

select()函数原型中,用到了很多fd_set*这样的指针变量。当我学习的时候,不是很理解这种写法到底是什么意思。

int select(int nfds,  fd_set* readset,  fd_set* writeset,  fe_set* exceptset,  struct timeval* timeout);这是我们熟知的select函数原型,这个函数可以做到很好的监听作用,监听读、写、报错、设置监听时间。但是看到那么多的set_fd*指针时,我迷茫了,刚开始,我只是可根据fd来推测出这是一个文件描述符。后来通过学习发现,这是一个宏定义数组,其中有很多数组可以定义,可以根据自己的需要进行设置。譬如说,我们只想监听函数的写操作时,函数定义如下:

int select(1,  NULL, &fdset, NULL,  &tv);我们只需要把相应写操作那写入参数地址即可。

但是如何定义fdset呢,这就是fd_set()函数的功能了。在调用select()函数前,需要先对fdset进行定义。

Linux内核中,给我们提供了4个fd_set操作宏,FD_ZERO();FD_SET();FD_CLR();FD_ISSET();我们可根据自身的需要对其进行一一操作。最后将fdset地址写入select函数即可。

以此类推,也可以完成单独的读、写、错误,或者一些复合的IO操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值