O_NONBLOCK与O_NDELAY有何不同

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

你可能感兴趣的:(O_NONBLOCK与O_NDELAY有何不同)