创建PIPE块

时间:2014-05-09 07:48:14

标签: c named-pipes

我使用以下代码创建了一个PIPE。但是当程序运行fd = open(FIFO, O_RDONLY);时出现了问题。这种现象是阻塞的。有人可以给我一些建议吗?非常感谢。

#include<errno.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<stdio.h>
#define FIFO "/tmp/test"

int main(int argc, char** argv)
{
    char buf_r[100];
    int fd;
    int nread;
    if((mkfifo(FIFO, O_CREAT) < 0) && (errno != EEXIST))
    {
            printf("can not create FIFO\n");
            exit(1);
    }

    printf("Prepare read data\n");
    fd = open(FIFO, O_RDONLY);
    if(fd == -1)
    {
            exit(1);
    }

    while(1)
    {
            if((nread = read(fd, buf_r, 100)) == -1)
            {
                    if(errno == EAGAIN) printf("No data\n");
            }

            if(buf_r[0]=='Q') break;

            buf_r[nread]=0;
            printf("data is:%s\n", buf_r);
            sleep(1);
    }

}

1 个答案:

答案 0 :(得分:6)

打开FIFO阻塞直到&#34;通信对等体&#34;也连接到FIFO,以便成功建立管道。

顺便说一下,当创建FIFO失败时,你应该输出(最多)一个警告并继续 - 有可能FIFO已经存在并且可以重复使用。也许/root/test/test不是这个FIFO的最佳位置......