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