c - select() 中的 nfds 用于什么

标签 c select

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

最佳答案

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

所以,如果你想监控文件描述符 24-31,你可以将 nfds 设置为 32,并确保你使用 FD_ZERO() 将整个文件清零fd_setFD_SET() 设置条目 24-31。还要注意,select() 修改了输入参数,因此您必须在 select() 返回后使用 FD_ISSET() 进行测试,并且通常在再次调用 select() 之前,您必须重做 fd_set 的初始化(或复制保存的值)。

关于c - select() 中的 nfds 用于什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8695678/

相关文章:

c - 双向链表 - 段错误

Nhibernate 查询以选择按行分组的计数

MySQL:是否可以在没有表的情况下对 'fill' 进行 SELECT?

c - 如何在 C 中仅反转整数(32 位)的最后 8 位?

c - 系统调用C程序中的循环

c - 声明 typedef 之间的区别

python - SQLite3 Python : executemany SELECT

c - 结构体数组的结构体

c# - 从列表中选择<T>

sql - 如何将 select 语句的结果存储在变量中?