带有 fifo 的 C 程序不起作用,Unix 控制台等待输入



我想制作一个简单的使用fifo的程序。我编译了这段代码,当我运行它时,控制台正在等待输入。我试图在第一行放置一个 printf,但它没有出现在控制台上。

int main(){
char* fifo = "./f"; 
int x = mkfifo(fifo, 0700);
if ( x == -1){
perror("error open");
exit(EXIT_FAILURE);
}
int f = open (fifo, O_WRONLY);
if ( f == -1){
perror("error open");
exit(EXIT_FAILURE);
}
close(f);
unlink(fifo);
return 0;
}

在控制台中,我像这样运行它

./x

什么也没发生,只是光标在下一行并等待输入。

为什么我的程序没有运行?

mkfifo()手册页:

打开FIFO进行

读取通常会阻塞,直到其他进程打开相同的FIFO进行写入,反之亦然。 参见 fifo(7( 了解 FIFO 特殊文件的非阻塞处理。

因此,在调用 open(( 后,您的进程将被暂停,直到另一个进程以读取访问权限打开 fifo。在您的情况下,这永远不会发生。

最新更新