在 linux 下使用 C 中的 fifo 文件时,我遇到了一个奇怪的问题。
让我们从代码开始:
#include<stdio.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/stat.h>
int main(int args, char *argv[])
{
mkfifo("fif",0666);
int x = fork();
if(x!=0)
{
if(strcmp(argv[1],"read")==0)
{
int rea=open("fif",O_RDONLY,0666);
wait(NULL);
char buf[50];
read(rea,buf,50);
printf("\n %s \n",buf);
close(rea);
}
}
else
{
if(strcmp(argv[1],"write")==0)
{
int wri=open("fif",O_WRONLY,0666);
write(wri,argv[2],strlen(argv[2])+1);
close(wri);
}
}
return 0;
}
现在有一些关于我想要代码做什么的细节。
运行这样的程序后:
./prog write hello
./prog write how
./prog write are_you
./prog read
我想在终端:
hello
how
are_you
但不是这个,我只得到这个:
are_you
问题是:我想向 FIFO 写入几条消息,然后通过读取 FIFO,它打算接收存储在其中的整个文本。但不幸的是,只有最后一条消息存储/写入标准输出(在本例中为终端),就像执行的唯一命令是:
./prog write are_you
我试图删除这一行:
mkfifo("fif",0666);
因为我想,如果 FIFO 文件已经存在,这一行可以创建并覆盖现有的 FIFO 文件。但这并没有改变什么。
那么我必须做些什么才能使其按预期工作?