gpt4 book ai didi

linux - 使用 FIFO 的错误写入终端只是挂起没有输出

转载 作者:太空宇宙 更新时间:2023-11-04 11:11:08 25 4
gpt4 key购买 nike

我正在尝试使用 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++

最佳答案

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

您不能打开一个 FIFO 进行写入,在其中写入一些东西然后关闭它,然后再打开它进行读取和检索数据。它必须同时打开以进行读写,因为它是一个命名的 PIPE。

你的程序可能挂了

fd=open ("oss", O_WRONLY);

因为它正在等待有人打开 FIFO 进行读取。

我在编写由写入 FIFO 的命令控制的守护进程时了解到这一点。我花了一天完全莫名其妙,然后阅读

man 2 open

给了一个提示

man 7 fifo

我在哪里找到了解决方案。

关于linux - 使用 FIFO 的错误写入终端只是挂起没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23135326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com