Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用C语言实现fifo_C_File Io_Fifo - Fatal编程技术网

用C语言实现fifo

用C语言实现fifo,c,file-io,fifo,C,File Io,Fifo,我的代码有两个问题 第一个问题是,一旦我创建了一个fifo,我不知道如何在代码中添加一个条件,以便在将来的运行中,如果fifo存在,那么就不要创建它。试着用谷歌搜索,“访问”没用(它只是在那里停顿了一下,没有继续) 我的第二个问题是,代码卡在“open”(“MyFifo…”)行中,即使这是我创建fifo后的第一次(这意味着我刚刚创建了fifo,mkfifo成功,我到达open()行-它卡在那里) //创建新的fifo if(mkfifo(“myFifo”,0666)您要查找的函数调用为。如果文件

我的代码有两个问题

第一个问题是,一旦我创建了一个fifo,我不知道如何在代码中添加一个条件,以便在将来的运行中,如果fifo存在,那么就不要创建它。试着用谷歌搜索,“访问”没用(它只是在那里停顿了一下,没有继续)

我的第二个问题是,代码卡在“open”(“MyFifo…”)行中,即使这是我创建fifo后的第一次(这意味着我刚刚创建了fifo,mkfifo成功,我到达open()行-它卡在那里)

//创建新的fifo

if(mkfifo(“myFifo”,0666)您要查找的函数调用为。如果文件存在,它将用文件属性(如修改时间)填充
struct stat
。如果文件不存在,
stat()
将返回-1,
errno
将设置为
EACCESS


他说,

打开FIFO进行读取通常会阻塞,直到其他进程打开相同的FIFO进行写入,反之亦然


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

谢谢。另一个问题:从fifo读取也会被阻塞?我的意思是,如果我读取一个空的fifo,我的进程将被阻塞,直到有人写入它?当有人写入fifo时,我如何实现“从fifo读取”“?
read
在FIFO上阻塞,直到另一个进程
写入它。请参阅。
EACCESS
不是从
stat()得到的唯一可能的错误。”
;如果名称是路径名并且其中一个组件是不存在的目录,或者
ELOOP
,或者…简单地尝试创建FIFO并不一定不可行,并且只有在错误不
EEXIST
时才抱怨。那么您知道名称存在;您只需要使用
stat()
验证它到底是否是FIFO(
S_ISFIFO()
)。
//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);
}