我的代码存在两个问题。
第一个问题是,一旦我创建了一个fifo,我不知道如何在代码中添加条件,以便在将来运行时,如果fifo存在 - 那么就是不要创建它。尝试谷歌,“访问”没有工作(它只是在那里,并没有继续)。
我的第二个问题是,代码卡在“open(”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);
}
任何想法我做错了什么?
答案 0 :(得分:1)
您正在寻找的函数调用是stat
。如果文件存在,它将填充struct stat
文件属性,例如修改时间。如果该文件不存在,stat()
将返回-1,errno
将设置为EACCESS
。
打开FIFO以便正常读取块,直到某个其他进程打开相同的FIFO进行写入,反之亦然。
要让open()
停止挂起,请先启动另一个写入FIFO的进程。如果另一个进程首先打开FIFO进行写入,则读取程序将不会在open()
上完全挂起。