Posix
例如,什麼可以產生 POLLNVAL?
關於的參考
poll()
只是說“指定的 fd 值無效。該標誌只在 revents 成員中有效;它應該在事件成員中被忽略。”。這不清楚(至少對我來說):如果文件描述符無效,不應該輪詢返回錯誤(負返回值)?
我有同樣的問題,
POLLERR
並在某處了解到它可能指的是,例如,設備或網路中的錯誤。這一個POLLNVAL
,,仍然是神秘的。有人知道範例案例嗎?
POLLNVAL
如果文件描述符編號與文件描述符不對應,則設置。我不確定為什麼選擇這種行為而不是
poll
返回錯誤。原因可能是易於實現:它允許實現在struct pollfd
一次數組上循環,而不必處理數組的某些元素會被修改而其他元素不會被修改的早期返回。也可能是因為程序員的方便。由於呼叫
poll
無效的文件描述符不是錯誤,因此可以關閉文件描述符並仍將其包含在數組中。這種便利性的興趣有限:您只能在不打開任何其他文件的情況下執行此操作(因為它可能會重用文件描述符),並且您仍然會為數組元素付出(微小的)性能損失。它在多執行緒程序中很有用,其中一個執行緒可能close
在另一個執行緒正在poll
呼叫或即將呼叫時呼叫:這不是錯誤,輪詢執行緒只需要在open
.