带fifo的C程序无法工作,Unix控制台等待输入。

问题描述 投票:0回答:1

我想做一个使用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

但什么都没有发生,只是光标正在进入下一行并等待输入。

为什么我的程序不能运行?

c shell unix fifo
1个回答
4
投票

mkfifo() man page:

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

所以在你调用open()之后,你的进程会被搁置,直到另一个进程打开fifo的读权限。在你的例子中,这永远不会发生。

© www.soinside.com 2019 - 2024. All rights reserved.