使用FIFO写错误终端只挂起没有输出

时间:2014-04-17 14:03:05

标签: linux g++ fifo

我正在尝试使用FIFO在两个进程之间进行读写,但是当我打开一个FIFO时,它不打印任何我给它打印的消息,当我写它时它不会显示任何东西......所以怎么样我想知道它的工作与否?为什么它会挂在终端中,它只是继续接受输入并且没有结束?请帮助我在这里我认为代码是正确的但是在这里它

int  main ()

{
    int fd;
    char  buffer[MAX];
    char * os;
    if(mkfifo("oss",0666)<0)
    {
        perror("FIFO (named pipe) could not be created.");
        exit(-1);
    }
    else printf("\nPipe has been created...");
    fd=open ("oss", O_WRONLY);
    if (fd <0)
    {
        perror("Could not open named pipe.");
        exit(-1);
    }
    else printf("Pipe has been opened.");
     strcpy(buffer,"please connect :( ");

    if( write (fd,buffer, strlen(buffer)+1) < 0 )
    {
      perror("Error writing to named Pipe (FIFO)");
      exit(-1);
    }
    else 
        printf("Message has been written to pipe.");

我在linux上使用g ++

1 个答案:

答案 0 :(得分:1)

关于FIFO的最重要的事情是open()系统调用阻塞,直到有人试图为另一个方向打开相同的FIFO。

您无法打开FIFO进行写入,在其中写入内容并关闭它,然后打开它以便读取和检索数据。它必须同时打开读写,因为它是一个名为PIPE。

您的计划可能就在线上

fd=open ("oss", O_WRONLY);

因为它在等人打开FIFO进行阅读。

我在编写由写入FIFO的命令控制的守护进程时学到了这一点。我花了一天时间完全不知所措,然后阅读

man 2 open

提示

man 7 fifo

我找到了解决方案。