我无法理解在 linux 中为 select() 设置的 writefds 添加描述符意味着什么。我写了一些简单的代码,将 stdout 的描述符添加到 writefds 集并使用 NULL 超时。现在,我的代码只是无限循环检查是否设置了这个描述符,如果设置了,它会打印“WRITING”。当我运行我的代码时,它只是不断打印“WRITING”到无穷大。当我为 stdin 执行此操作时,也会发生同样的事情。同样,循环中没有其他代码。 stdin/stdout 是否总是准备好写入?
最佳答案
这意味着您可以对该 fd 调用 write 并且内核 promise 不会阻塞并至少消耗 1 个字节。
更多细节。如果您的套接字未处于非阻塞模式并且与套接字关联的内核缓冲区已满,则内核将使您的线程进入休眠状态,直到它可以清空一些缓冲区并能够消耗您的部分写入。
如果您的套接字处于非阻塞模式并且内核缓冲区已满,写入将立即返回而不会消耗任何字节。
关于C select() writefds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1931501/