我想做一个使用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()
man page:
打开一个FIFO进行读取,通常会阻塞,直到其他进程打开同一个FIFO进行写入,反之亦然。 参见 fifo(7) 以了解 FIFO 特殊文件的非阻塞处理。
所以在你调用open()之后,你的进程会被搁置,直到另一个进程打开fifo的读权限。在你的例子中,这永远不会发生。