什么是关于文件 I/O 的“阻塞”?

Mar*_*rty 5 filesystems pipe

我的教科书提到了它,但没有具体定义它。从它使用的上下文(在这个例子中,管道)来看,我认为如果管道的一端阻塞,它会被暂时“禁用”,如果你愿意,并且数据排队?这是我有点困惑的部分。当它“阻塞”时,(不管它是什么)是否等到它被解除阻塞,然后继续在阻塞时发送的任何内容?这似乎是他们暗示的,因为他们说当它是“非阻塞”时,它会立即返回一个错误(如果我没记错的话)。对正确方向的任何澄清或推动表示赞赏。谢谢!

(不确定要使用哪些标签)

njs*_*jsg 7

当有数据可用时,阻塞调用将返回(并等待所述数据),如果有数据要返回,非阻塞调用将返回数据,否则返回一个错误,表示没有数据(但总是“立即”返回)称为)。

使用一种还是另一种取决于您想要做什么——如果您想获取该数据并且没有其他事情可做,您只需调用阻塞调用。但有时,如果还没有数据,您就想做其他事情。

另请参阅select()POSIX 瑞士刀“有数据吗?” 一种调用,具有对多个文件描述符的阻塞调用,这些调用可能是定时的(因此,如果五分钟内没有输入,您可以让它返回错误)。