当前位置: 技术问答>linux和unix
有关FIFO的问题!急急急!!!!
来源: 互联网 发布时间:2015-01-17
本文导语: 为了防止客户机数目从1变为0时而导致的FIFO文件被关闭。通常用以下方法: #include #include #include int main(void) { int fdread,fdwrite; unlink(FIFO); mkfifo(FIFO,FILE_MODE); fdread=open(FIFO,O_RDONLY|_NONBLOCK); fdwrite=open(FIFO,O...
为了防止客户机数目从1变为0时而导致的FIFO文件被关闭。通常用以下方法:
#include
#include
#include
int
main(void)
{
int fdread,fdwrite;
unlink(FIFO);
mkfifo(FIFO,FILE_MODE);
fdread=open(FIFO,O_RDONLY|_NONBLOCK);
fdwrite=open(FIFO,O_WRONLY);
clr_fl(O_NONBLOCK);
}
为什么不把这两句合并为一句呢???
fdwrite=open(FIFO,O_WRONLY);
clr_fl(O_NONBLOCK);
---》fdwrite=open(FIFO,O_WRONLY|O_NONBLOCK);请高手指教
#include
#include
#include
int
main(void)
{
int fdread,fdwrite;
unlink(FIFO);
mkfifo(FIFO,FILE_MODE);
fdread=open(FIFO,O_RDONLY|_NONBLOCK);
fdwrite=open(FIFO,O_WRONLY);
clr_fl(O_NONBLOCK);
}
为什么不把这两句合并为一句呢???
fdwrite=open(FIFO,O_WRONLY);
clr_fl(O_NONBLOCK);
---》fdwrite=open(FIFO,O_WRONLY|O_NONBLOCK);请高手指教
|
fdwrite=open(FIFO,O_WRONLY);
是block方式打开的,不立即返回,
如果你改成
fdwrite=open(FIFO,O_WRONLY|O_NONBLOCK)
是非block方式,它不管你是否打开成功都会返回,
这样就可能导致你没有取得文件描述符
是block方式打开的,不立即返回,
如果你改成
fdwrite=open(FIFO,O_WRONLY|O_NONBLOCK)
是非block方式,它不管你是否打开成功都会返回,
这样就可能导致你没有取得文件描述符
|
你的程序应当对每一步操作进行异常处理,如果有相应的异常操作则两句和一句的效果是相同的。
当然对你程序的现状,两句还是比一句保险。
如果 fdread=open(FIFO,O_RDONLY|_NONBLOCK);操作成功了,则两句合一句的效果是相同的;如果fdread=open(FIFO,O_RDONLY|_NONBLOCK);操作失败了则
fdwrite=open(FIFO,O_WRONLY);
clr_fl(O_NONBLOCK);
和fdwrite=open(FIFO,O_WRONLY|O_NONBLOCK);的结果会大不相同,fdwrite=open(FIFO,O_WRONLY);会保证返回的描述字是真实存在的>0;而
fdwrite=open(FIFO,O_WRONLY|O_NONBLOCK);返回的肯定是非法的描述字
当然对你程序的现状,两句还是比一句保险。
如果 fdread=open(FIFO,O_RDONLY|_NONBLOCK);操作成功了,则两句合一句的效果是相同的;如果fdread=open(FIFO,O_RDONLY|_NONBLOCK);操作失败了则
fdwrite=open(FIFO,O_WRONLY);
clr_fl(O_NONBLOCK);
和fdwrite=open(FIFO,O_WRONLY|O_NONBLOCK);的结果会大不相同,fdwrite=open(FIFO,O_WRONLY);会保证返回的描述字是真实存在的>0;而
fdwrite=open(FIFO,O_WRONLY|O_NONBLOCK);返回的肯定是非法的描述字