select()
的手册页指出:
WARNING:
select()
can monitor only file descriptors numbers that are less thanFD_SETSIZE
(1024)—an unreasonably low limit for many modern applications.
这个很模糊,我理解select只能监控1024个文件描述符,但是如果我想让它监控单个文件描述符,一个整数值大于1024的描述符怎么办?
就上下文而言,我正在编写一个文件描述符超时为 15 秒的程序,并且该文件描述符可能具有大于 1024 的整数值。据我几个月前听到的消息,select( )
似乎是此任务的最佳选择。
我只会监视一个文件描述符,假设它名为 int fd
和 fd == 65533
。可以选择观看这个单一描述符65533吗?
最佳答案
联机帮助页可能会给您这样的印象:1024 是 select
的硬上限,但事实并非如此。某些 C 库允许您在包含 sys/select.h
之前自行#define FD_SETSIZE
,从而扩大 fd_set
。即使您没有这些 C 库之一,也没有什么可以阻止您定义您自己的、更大的类似 fd_set 的数据类型。内核不知道 C 库定义的 fd_set
有多大:相反,它信任 nfds
参数来告诉它有多少位。
但是,如果您只有一个 fd 要监视,那么您绝对应该使用 poll()
而不是 select()
,因为它使用起来更简单,而且功能更多高效,对于少量的 fd。如果您有许多个fd要监视,epoll
或kqueue
或类似的将比poll
或选择
。因此通常不值得费心解决 fd_set
的大小。
关于c - 如果我有一个整数值大于 1024 的文件描述符,select() 仍然可以处理它吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77254417/