在上一篇文章《linux下“阻塞”与“非阻塞”的定义及区别》中,我们分析了阻塞和非阻塞两种模式,与“非阻塞模式”相关的有两个 标志,就是 O_NONBLOCK与O_NDELAY,这两种参数的结果都是使I/O操作设置为“非阻塞模式”,也就是non-blocking,当进行read/write操作时,不管结果如何,都会马上返回,而不会阻塞。
他们的区别是:在read时,如果读不到数据,O_NDELAY会返回0,由于正常读取到文件末尾时,也会返回0,这样就无法区分是否是遗产隔离,所以就引入了O_NONBLOCK,在读不到数据时,返回-1,并且设置errno为EAGAIN,而读到结尾处,正常返回0.
O_NDELAY是早期的版本,虽然兼容,但是仍然推荐使用O_NONBLOCK代替O_NDELAY.

Logo

更多推荐