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时设定。
转载于:https://www.cnblogs.com/zxc2man/p/7649227.html
本文介绍了O_NONBLOCK和O_NDELAY两种文件描述符标志的区别,这两种标志都用于设置文件描述符为非阻塞模式,使得I/O操作不会因等待而挂起。文章详细解释了它们的行为差异,特别是当读取不到数据时的不同返回值,以及在GNU C编译器中对这两种标志的实际处理方式。
684

被折叠的 条评论
为什么被折叠?



