select() 中的 nfds 有何用途

问题描述 投票:0回答:1

我想知道

nfds
的作用是什么,在阅读了不同的手册后,我最终得到的唯一答案是 它是编号最高的文件描述符加一。它到底是用来做什么的?

c posix-select
1个回答
21
投票

当您使用

select()
时,您正在尝试检查一组文件描述符的状态。您感兴趣的文件描述符的可能范围从低值 0(标准输入)到某个最大值(您打开的、您有兴趣检查其状态的最高文件描述符)。您必须告诉
select()
文件描述符列表有多大,因为总数可能非常“庞大”(例如 32767)。在这种情况下,内核需要时间来处理描述符,而且您可能尚未初始化
fd_set
达到该数量的条目。
FD_SETSIZE
也出现在等式中,但有时您可以更改该值。

因此,如果您想监视文件描述符 24-31,请将

nfds
设置为 32,并确保使用
FD_ZERO()
将整个
fd_set
归零,并使用
FD_SET()
设置条目 24-31。还要注意的是,
select()
会修改输入参数,所以在
FD_ISSET()
返回后你必须使用
select()
来测试,并且一般情况下你必须重做
fd_set
的初始化(或复制保存的值)在再次致电
select()
之前。

© www.soinside.com 2019 - 2024. All rights reserved.