MSG_OOB
标志的recv()
读取带外数据。然而,TCP带外数据具有许多怪异之处(例如,仅1个字节可能会超时),因此很少使用。/sys
下的相应文件来读取属性的当前值,对文件描述符进行select()
,当属性更改时,exceptfds将被标记。然而,目前这仅适用于某些属性以及挂载更改(/proc/mounts
)。你说得对,这取决于你使用文件描述符引用的设备类型。因此,对于套接字、FIFO、串口等设备,情况是不同的...
查看read()的man页面。在底部(至少在OS X中),它列出了您可以针对不同设备获得的不同错误。write()也是如此。
对于套接字、FIFO和其他IPC机制,我建议查看Unix网络编程第1卷和第2卷。如果我没记错的话,它描述了不同错误条件下可以预期的errnos。
我曾经使用FIFO走过这条路。最终我想到了生产者和消费者可以与FIFO的每一端交互的所有方式,然后为每种情况编写了测试用例。虽然有点繁琐,但这是发现所有不同错误条件的好方法。我学到了很多东西,最终代码也能正常工作了。