select()将如何返回除-1、0或1以外的任何内容?

select()将如何返回除-1、0或1以外的任何内容?,c,select,file-descriptor,C,Select,File Descriptor,对于我来说,这绝对是一个愚蠢的误解,但是select()的手册页中指出: timeout参数指定select()在等待文件描述符就绪时应阻止的间隔。呼叫将被阻止,直到: *文件描述符准备就绪 *呼叫被信号处理器中断;或 *超时过期 而且 成功后,select()和pselect()返回文件的编号 包含在三个返回描述符集中的描述符(即, 在READFD、WRITEFD、READFD中设置的位的总数, exceptfds),如果超时在任何事件之前过期,则该值可能为零 有趣的事情发生了。在出现错误时,

对于我来说,这绝对是一个愚蠢的误解,但是select()的手册页中指出:

timeout参数指定select()在等待文件描述符就绪时应阻止的间隔。呼叫将被阻止,直到:

*文件描述符准备就绪

*呼叫被信号处理器中断;或

*超时过期

而且

成功后,select()和pselect()返回文件的编号 包含在三个返回描述符集中的描述符(即, 在READFD、WRITEFD、READFD中设置的位的总数, exceptfds),如果超时在任何事件之前过期,则该值可能为零 有趣的事情发生了。在出现错误时,返回-1,并将errno设置为 指出错误;文件描述符集未经修改,并且 超时变得未定义

所以我的问题是——如果它在文件描述符准备好后立即停止阻塞,它会不会立即返回1?如果没有FD准备就绪,则返回0,否则返回错误并返回-1


显然,在实践中,它返回的不仅仅是1:关键是您应该能够读/写多个FD,对吗?

由于现代抢占式多任务处理的工作方式,多个描述符可以在您的进程被唤醒之前准备就绪,
select
调用计算描述符