O_NOBLOCK标志会使文件write()失败吗?在什么情况下?

时间:2013-04-17 12:53:03

标签: c linux

我将大约50k字节的数据写入一个文件(存储在USB磁盘中并挂载在linux 2.6.37.FAT32上),每200 ms使用一次O_NOBLOCK。是否write()函数有返回EAGAIN的风险。如果是,为什么以及在什么情况下。我已经运行了半个小时的程序,并且没有报告错误返回。

2 个答案:

答案 0 :(得分:2)

正确但已删除答案的副本:

没有。 O_NONBLOCK标志不会影响常规文件的使用。

答案 1 :(得分:0)

一些reference,为了完整性:

仅适用于管道;对于常规文件,它被忽略。

  

如果O_NONBLOCK标志清零,则写请求可能导致线程阻塞,但在正常完成时,它将返回nbyte。

     

如果设置了O_NONBLOCK标志,则以下列方式处理write()请求的方式不同:

     
      
  • write()函数不应该阻塞线程。
  •   
  • {PIPE_BUF}或更少字节的写请求应具有以下效果:如果管道中有足够的可用空间,write()将传输所有数据并返回请求的字节数。否则,write()不传输数据并返回-1,并将errno设置为[EAGAIN]。
  •   
  • 超过{PIPE_BUF}字节的写请求将导致以下之一:   
        
    • 当至少可以写入一个字节时,尽可能传输并返回写入的字节数。当读取先前写入管道的所有数据时,它应至少传输{PIPE_BUF}个字节。
    •   
    • 当没有数据可以写入时,不传输数据,并返回-1,并将errno设置为[EAGAIN]。
    •   
  •