所以,我一直在阅读有关 select 和 poll 的手册页,但不幸的是,我仍然对某些事情感到困惑。如果有人可以为我回答以下问题,那就太好了:
- 当文件以非阻塞模式打开时会发生什么?(设置了 O_NONBLOCK 标志)
- 当缓冲区有数据时,read() 阻塞或返回什么?
- 当缓冲区中没有任何数据可供读取时会发生什么?
所以,我一直在阅读有关 select 和 poll 的手册页,但不幸的是,我仍然对某些事情感到困惑。如果有人可以为我回答以下问题,那就太好了:
当文件以非阻塞模式打开时会发生什么?(设置了 O_NONBLOCK 标志)
I/O 操作不会阻塞,而是返回一个错误代码,表明它们会阻塞。
当缓冲区有数据时,read() 阻塞或返回什么?
当缓冲区中有数据时,read
返回它。
当缓冲区中没有任何数据可供读取时会发生什么?
如果套接字是阻塞的,它会阻塞直到可以返回一些数据。如果套接字是非阻塞的,它会返回一个错误代码,表明如果套接字被阻塞,它将被阻塞。
顺便说一句,一个重要的警告select
和poll
——它们几乎不应该与阻塞套接字一起使用。select
当您从or获得读取或写入命中时poll
,这意味着在您调用函数和返回函数之间的某个时间执行的假设的规范操作不会被阻塞。这些是状态报告功能,不提供未来保证。如果您正在编写一个永远不会阻塞的程序,它必须将其所有套接字设置为非阻塞。
当文件以非阻塞模式打开时会发生什么?(设置了 O_NONBLOCK 标志)
当缓冲区有数据时,read() 阻塞或返回什么?
当缓冲区中没有任何数据可供读取时会发生什么?