2017-02-24 100 views
1

我看了Linux的手冊頁上的答案,但似乎無法找到它。我知道read()被阻擋,但我仍然不確定write()。 任何人都可以指出我的任何文件澄清?是C阻塞還是非阻塞的write()函數?

+3

是的,絕對。如果寫入緩衝區已滿,則可以阻止寫入。讀取和寫入肯定會使自己陷入僵局。 (文件描述符需要明確地非阻塞,以免受此影響。) –

+3

它取決於您正在寫入的文件描述符的屬性。 – PSkocik

+0

阻塞意味着寫入不會返回,直到寫入完成。定義'完成'。一旦它完成了足夠的寫操作,它就會返回(即它有數據並且你可以釋放緩衝區),但它是磁盤上的數據,可能是它在遠程機器中的TCP堆棧,值得懷疑 – pm100

回答

7

read()write()上閱讀POSIX。另請參閱open()pipe()等功能。

它取決於您正在讀取或寫入的文件描述符(例如O_NONBLOCK)的屬性以及基礎文件類型(磁盤文件vs管道vs FIFO vs套接字vs字符或塊特殊) , 等等。

簡而言之,根據具體情況,read()write()都可以是阻塞的或非阻塞的。