gpt4 book ai didi

c++ - 管道损坏,FIFO 文件

转载 作者:太空宇宙 更新时间:2023-11-04 08:15:25 25 4
gpt4 key购买 nike

我正在尝试一个使用 FIFO 文件的程序,但我得到的是 Broken pipe 作为输出。这是代码-

#include<iostream>
#include<stdlib.h>
#include<fcntl.h>
#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<sys/stat.h>
#include<sys/types.h>
using namespace std;
int main(int argc,char *argv[])
{
int fd; //stores file descriptor returnd from open
char buf[256];
if(argc<2||argc>3)
{
cout<<"Invalid Arguments";
return 1;
}

mkfifo(argv[1],0777);
if(argc==3)
{
cout<<"Writer\n";
if((fd=open(argv[1],O_WRONLY))==-1)
{
perror("open");
return 1;
}
write(fd,argv[2],strlen(argv[2]));
sleep(10);
}
else
{ cout<<"Reader\n";
if((fd=open(argv[1],O_RDONLY|O_NONBLOCK))==-1)
{
perror("open");
return 1;
}

read(fd,&buf,sizeof(buf));
cout<<buf;

}
close(fd);
return 1;
}

输出:Fifo 下面是文件名,Hello 是内容。

./a.out fifo hello &

Writer

./a.out fifo
Reader

[1]+ Broken pipe

我应该得到“Hello”作为输出。谁能帮忙?

最佳答案

您的写入发生在您启动阅读器之前。当您写入管道但没有读取器时,您会收到 SIGPIPE。

在此特定设计中,您需要使用重试逻辑处理 SIGPIPE。

关于c++ - 管道损坏,FIFO 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36044743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com