2017-02-24 103 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()都可以是阻塞的或非阻塞的。