【问题标题】:Is the write() function in C blocking or non-blocking?C语言中的write()函数是阻塞的还是非阻塞的?
【发布时间】:2017-02-24 23:29:15
【问题描述】:

我在 Linux 手册页上寻找答案,但似乎找不到。我知道read() 正在阻塞,但我仍然不确定write()。 谁能指出我需要澄清的任何文档?

【问题讨论】:

  • 是的,当然。如果写入缓冲区已满,则写入会阻塞。您当然可以通过读写使自己陷入僵局。 (文件描述符需要显式地设为非阻塞才能不受此影响。)
  • 这取决于你正在写入的文件描述符的属性。
  • 阻塞意味​​着在写入完成之前写入不会返回。定义“完成”。一旦它完成了足够的操作以允许在某个时刻完成写操作(即它有数据并且您可以释放缓冲区),它将返回,但它是磁盘上的数据,也许是远程机器 TCP 堆栈中的数据,怀疑
  • C 中没有写,unix/posix 中有。

标签: c linux posix


【解决方案1】:

read() 上阅读 POSIX 和 write()。另请参阅 open()pipe() 等函数。

这取决于您正在读取或写入的文件描述符的属性(例如 O_NONBLOCK),以及底层文件类型(磁盘文件、管道、FIFO、套接字、特殊字符或块) ) 等等。

简而言之,read()write() 都可以是阻塞或非阻塞,具体取决于具体情况。

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多