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

标签 c++ c

我正在尝试使用 FIFO 文件的程序,但输出为“损坏的管道”。这是代码 -

#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/

相关文章:

c++ - 使用 x 关闭程序时内存泄漏

c++ - 在链表运行时错误中插入节点

c++ - std::tmpfile() 没有选择 TMPDIR 位置

C 数字母函数

c - 在 C 中,我如何从文件中扫描并与另一个扫描进行比较

c++ - std::out_of_range 在 std::sort 期间使用自定义比较器

c++ - 在 C++ 的构造函数调用中通过命名参数分配类变量

c - 生成文件错误信息

c - 在 C 代码中从队列中读取给定元素

c - 从集合中查找最接近查询数字的两个不同数字的总和