0
我的代码有两个问题。在C中制作fifo
第一个问题是,一旦我创建了一个fifo,我不知道如何在代码中添加一个条件以便将来运行,如果fifo存在 - 那么就不要创建它。试图谷歌,“访问”不起作用(它只是在那里,并没有继续)。
我的第二个问题是,代码卡在“打开(”MyFifo ...“行,即使这是我创建fifo后的第一次(意思是我刚创建了fifo,mkfifo成功了,并且我到达的open()线 - 这是卡在那里)
//create new fifo
if(mkfifo("myFifo",0666)<0)
{
perror("fifo creation failed.");
exit(1);
}
//get fifo fd
if((fd=open("myFifo",O_RDONLY))==-1)
{
perror("failed opening fifo.");
exit(1);
}
任何想法,我做错了
谢谢。另一个问题:从fifo读取也阻止?我的意思是,如果我读了一个空的fifo,我的过程将被阻止,直到有人写信给它?我怎样才能实现“当有人写信给fifo时阅读”? – Jjang 2013-05-12 20:57:17
FIFO上的'read'阻塞,直到另一个进程'写'给它。参见[Beej的Unix IPC指南](http://beej.us/guide/bgipc/output/html/multipage/fifos.html)。 – andrewdotn 2013-05-12 21:04:21
'EACCESS'不是从'stat()'得到的唯一可能的错误;如果名称是路径名,并且其中一个组件是不存在的目录或ELOOP,或者......您可以获得ENOTDIR,但只需尝试创建FIFO并不一定是不可行的,错误不是'EEXIST'。然后你知道这个名字存在;你只需要使用'stat()'来验证它是否是一个FIFO('S_ISFIFO()')。 – 2013-05-12 22:03:21