Linux 使用FIFO'写入时出错;终端只是挂起没有输出
我尝试使用FIFO在两个进程之间读写,但当我打开FIFO时,它不会打印我给它打印的任何消息,同样,当我向它写入时,它也不会显示任何内容……所以我怎么知道它是否工作?为什么它挂在终端上?它只是不断地接受输入,并没有结束?请帮我这里我认为代码是正确的,但它在这里Linux 使用FIFO'写入时出错;终端只是挂起没有输出,linux,g++,fifo,Linux,G++,Fifo,我尝试使用FIFO在两个进程之间读写,但当我打开FIFO时,它不会打印我给它打印的任何消息,同样,当我向它写入时,它也不会显示任何内容……所以我怎么知道它是否工作?为什么它挂在终端上?它只是不断地接受输入,并没有结束?请帮我这里我认为代码是正确的,但它在这里 int main () { int fd; char buffer[MAX]; char * os; if(mkfifo("oss",0666)<0) { perror("
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.");
int main()
{
int-fd;
字符缓冲区[MAX];
char*os;
if(mkfifo(“oss”,0666)了解FIFO最重要的事情是open()
syscall会阻塞,直到有人试图为另一个方向打开相同的FIFO
您不能打开FIFO进行写入,在其中写入内容并关闭它,然后再打开它进行读取和检索数据。必须同时打开FIFO进行读取和写入,因为它是一个命名管道
您的程序可能挂线了
fd=open ("oss", O_WRONLY);
因为它正在等待有人打开FIFO进行阅读
我是在编写一个由写入FIFO的命令控制的守护进程时学到这一点的。我花了一天的时间完全困惑不解,然后阅读
man 2 open
这给了我们一个暗示
man 7 fifo
在那里我找到了解决办法