C语言 select() 如何返回 -1、0 或 1 以外的任何内容?



这绝对只是我的一个愚蠢的误解,但是select((的手册页指出:

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

*文件描述符准备就绪;

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

*超时到期。

此外,那

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

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

显然,在实践中它返回的不仅仅是 1:重点是您应该能够读/写多个 fd,对吧?

由于现代抢占式多任务处理的工作方式,在进程被唤醒并且select调用对描述符进行计数之前,多个描述符可能会准备就绪。

相关内容

  • 没有找到相关文章

最新更新