我使用以下代码创建了一个 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);
}
}
最佳答案
打开 FIFO 阻塞,直到“通信对端”也连接到 FIFO,以便成功建立管道。
顺便说一句,当创建 FIFO 失败时,您应该(最多)输出一个警告并继续 - 有可能 FIFO 已经存在并且可以重复使用。也许 /root/test/test
不是这个 FIFO 的最佳位置......
关于创建 PIPE block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23559238/