我的教科书提到了它,但没有具体定义。从它所使用的上下文(在本例中为管道)来看,我认为它的意思是,如果管道的一端块,它暂时“禁用”(如果您愿意的话),并且数据已排队?这是我有点困惑的部分。当它“阻塞”时,(无论它是什么)是否会等到它被解除阻塞,然后继续在阻塞时发送的任何内容?这似乎是他们所暗示的,因为他们说当它是“非阻塞”时,它会立即返回一个错误(如果我没记错的话)。任何澄清或推动正确的方向表示赞赏。谢谢!
(不确定使用哪些标签)
答案1
当有可用数据(并等待所述数据)时,阻塞调用将返回,非阻塞调用将返回数据如果有数据要返回,否则返回错误,表示没有数据(但总是在调用后“立即”返回)。
您是否使用其中之一取决于您想要做什么 - 如果您想获取该数据并且没有其他事情可做,您只需调用阻塞调用即可。但有时如果还没有数据,您会想做其他事情。
另请参阅select()
POSIX 瑞士刀,表示“有数据吗?”一种调用,具有对多个文件描述符的阻塞调用,这些调用可能是定时的(因此,如果五分钟内没有输入,您可以让它返回并返回错误)。
答案2
如果 I/O 操作阻塞,则启动该操作的函数/系统调用不会将控制权返回给进程/线程,直到读取或写入适当数量的数据。