O_NONBLOCK
和O_NDELAY
所
产生的结果都是使I/O
变成非搁置模式(non-blocking)
,
在读取不到数据或是写入缓冲区已满会马上return
,而不会搁置程序动作,直到有数据或写入完
成。
它们的差别在于设立O_NDELAY
会
使I/O
函式马上回传0
,但是又衍生出一个
问题,因为读取到档案结尾时所回传的也是0
,这样无法得知是哪中情况;因此,O_NONBLOCK
就产生出来,它在读取不到数据时会回传-1
,
并且设置errno
为EAGAIN
。
不过需要注意的是,在GNU C
中O_NDELAY
只是为了与BSD
的程序兼容,实际上是使用O_NONBLOCK
作
为宏定义,而且O_NONBLOCK
除了在ioctl
中
使用,还可以在open
时设定。
O_NDELAY一般不用了