我正在尝试使用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 ++
答案 0 :(得分:1)
关于FIFO的最重要的事情是open()
系统调用阻塞,直到有人试图为另一个方向打开相同的FIFO。
您无法打开FIFO进行写入,在其中写入内容并关闭它,然后打开它以便读取和检索数据。它必须同时打开读写,因为它是一个名为PIPE。
您的计划可能就在线上
fd=open ("oss", O_WRONLY);
因为它在等人打开FIFO进行阅读。
我在编写由写入FIFO的命令控制的守护进程时学到了这一点。我花了一天时间完全不知所措,然后阅读
man 2 open
提示
man 7 fifo
我找到了解决方案。