现在的位置: 首页 > 综合 > 正文

O_NONBLOCK与O_NDELAY有何不同

2013年06月20日 ⁄ 综合 ⁄ 共 331字 ⁄ 字号 评论关闭

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一般不用了



抱歉!评论已关闭.