Chinaunix

标题: fifo [打印本页]

作者: dutysmart    时间: 2009-12-22 15:52
标题: fifo
把两个不同名字的fifo放在同一个进程中,作为两个线程时,设置为非阻塞,写端, 经常出现fifo open失败的情况。

这两个线程之间并不通过fifo通信,而且他们使用的也不是同一个fifo。  
   
如果对一个fifo频繁操作,如关闭后马上又打开,程序也容易down掉!感觉很不稳定。

close(m_fileDes);
int  l_options = O_WRONLY | O_CREAT | O_TRUNC;
m_fileDes=open(m_fileBasePath.c_str(),
                  l_options,
                  (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH));
作者: wliang511    时间: 2009-12-22 15:52
如果指定了O_NONBLOCK,只读open立即返回,如果没有进程已经为读而打开该FIFO,只写open将出错返回-1
作者: dutysmart    时间: 2009-12-23 07:28
如果其中之一的fifo open出错,另一个也不能工作了。
有人能解释下吗?
作者: syncpk99    时间: 2009-12-23 12:59
打开模式设置成读写模式
作者: dutysmart    时间: 2009-12-23 13:59
int  l_options = O_WRONLY | O_CREAT | O_TRUNC;
改成 int  l_options = O_WRONLY ;

是吗?
作者: syncpk99    时间: 2009-12-23 18:37
l_options = O_RDWR | O_CREAT | O_TRUNC;
作者: dutysmart    时间: 2009-12-23 19:13
现在就是要打开 fifo ,写入。
int  l_options = O_WRONLY | O_CREAT | O_TRUNC;

写端可以打开fifo操作吧?
作者: wliang511    时间: 2009-12-23 20:19
如果FIFO没有读端打开,向FIFO中再继续写数据将会收到信号SIGPIPE,该信号默认的动作是终止进程
作者: syncpk99    时间: 2009-12-24 08:51
楼上说的正解啊




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2