我想制作一个简单的使用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(7( 了解 FIFO 特殊文件的非阻塞处理。
因此,在调用 open(( 后,您的进程将被暂停,直到另一个进程以读取访问权限打开 fifo。在您的情况下,这永远不会发生。