在C中制作fifo

时间:2013-05-12 20:40:33

标签: c file-io fifo

我的代码存在两个问题。

第一个问题是,一旦我创建了一个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);
}

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

您正在寻找的函数调用是stat。如果文件存在,它将填充struct stat文件属性,例如修改时间。如果该文件不存在,stat()将返回-1,errno将设置为EACCESS


mkfifo man page说,

  

打开FIFO以便正常读取块,直到某个其他进程打开相同的FIFO进行写入,反之亦然。

要让open()停止挂起,请先启动另一个写入FIFO的进程。如果另一个进程首先打开FIFO进行写入,则读取程序将不会在open()上完全挂起。