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