O_NONBLOCK与O_NDELAY有何不同
来源:互联网 发布:php array clear 编辑:程序博客网 时间:2024/04/29 20:38
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会使I/O函式马上回传0,但是又衍生出一个问题,因为读取到档案结尾时所回传的也是0,这样无法得知是哪中情况;因此,O_NONBLOCK就产生出来,它在读取不到数据时会回传-1,并且设置errno为EAGAIN。
不过需要注意的是,在GNU C中O_NDELAY只是为了与BSD的程序兼容,实际上是使用O_NONBLOCK作为宏定义,而且O_NONBLOCK除了在ioctl中使用,还可以在open时设定。
APPENDED:
如果没有数据,那么该调用将被阻塞.处于等待状态,直到有字符输入,
或者到了规定的时限和出现错误为止,
通过以下方法,能使read函数立即返回。
fcntl(fd,F_SETFL,FNDELAY);
FNDELAY 函数使read函数在端口没月字符存在的情况下,立刻返回0,
如果要恢复正常(阻塞)状态,可以调用fcntl()函数,不要FNDELAY参数,
如下所示:
fcntl(Fd,F_SETFL,0);
在使用O_NDELAY参数打开串行口后,同样与使用了该函数调用。
fcntl(fd,F_SETFL,0);
或者到了规定的时限和出现错误为止,
通过以下方法,能使read函数立即返回。
fcntl(fd,F_SETFL,FNDELAY);
FNDELAY 函数使read函数在端口没月字符存在的情况下,立刻返回0,
如果要恢复正常(阻塞)状态,可以调用fcntl()函数,不要FNDELAY参数,
如下所示:
fcntl(Fd,F_SETFL,0);
在使用O_NDELAY参数打开串行口后,同样与使用了该函数调用。
fcntl(fd,F_SETFL,0);
原文地址:http://blog.csdn.net/ww2000e/article/details/4497349
- O_NONBLOCK与O_NDELAY有何不同?
- O_NONBLOCK与O_NDELAY有何不同
- O_NONBLOCK与O_NDELAY有何不同
- O_NONBLOCK与O_NDELAY有何不同
- O_NONBLOCK与O_NDELAY有何不同
- O_NONBLOCK与O_NDELAY有何不同
- O_NONBLOCK与O_NDELAY有何不同
- O_NONBLOCK与O_NDELAY有何不同?
- O_NONBLOCK与O_NDELAY有何不同
- JavaBean与EJB有何不同
- 管理与领导有何不同
- 管理与领导有何不同
- Directsound 与 Waveout 有何不同
- 请问NSInteger与int有何不同
- 虚拟机与Docker有何不同?
- 虚拟机与Docker有何不同?
- 虚拟机与Docker有何不同
- 虚拟机与Docker有何不同?
- 看马化腾这些IT大佬们都毕业于什么大学
- Cocos2D应用开发实践指南迷你书
- hdu 2529
- 关于使用github管理vim
- 如何留住你最棒的程序员
- O_NONBLOCK与O_NDELAY有何不同
- mysql中查询中文乱码
- oracle递归函数
- 张东:大数据时代挑战与解决之道
- jquery插件案例
- 发送短信的方法
- log4j 格式详解
- OK6410驱动学习之first_drv
- 初探Remoting双向通信(四)