C中的函数open()开始并且永不结束
由于某种原因,这个程序在这些open()中的一个之后永远不会计算(不知道是哪一个)它只是暂停并一直在那里做一些事情。。。我遗漏了什么吗C中的函数open()开始并且永不结束,c,unix,C,Unix,由于某种原因,这个程序在这些open()中的一个之后永远不会计算(不知道是哪一个)它只是暂停并一直在那里做一些事情。。。我遗漏了什么吗 编辑:我想感谢所有回答的人,在你们的帮助下,我能够更好地理解管道是如何工作的,并解决了我的问题。谢谢 正如sjnarv所指出的(我在完成回答之前没有对其进行注释…),一个open()写入FIFO的调用将被阻止,直到FIFO被另一个线程或另一个进程打开以便读取为止。你不能找出哪一个吗?可能是的,你遗漏了什么。这是什么,我们不能说,因为你不能给我们具体的代码是失败的
编辑:我想感谢所有回答的人,在你们的帮助下,我能够更好地理解管道是如何工作的,并解决了我的问题。谢谢 正如sjnarv所指出的(我在完成回答之前没有对其进行注释…),一个
open()
写入FIFO的调用将被阻止,直到FIFO被另一个线程或另一个进程打开以便读取为止。你不能找出哪一个吗?可能是的,你遗漏了什么。这是什么,我们不能说,因为你不能给我们具体的代码是失败的。尝试在调试器中运行程序,甚至只是插入打印语句,以确定代码失败的确切位置。您不会创建FIFO读取器。当这个应用程序阻塞打开时,我想你可以打开另一个shell并使用cat打开shell(不管它的名称是什么),你会看到打开和写入成功。管道要求两端都打开,所以它挂在写入端,等待有人打开管道进行读取。顺便问一下:“SHELL”(必须是字符数组或指向字符数组的指针)的内容是什么
int j = 1;
if((estado = open(SHELL, O_WRONLY))== -1){
if(errno == ENOENT){
mkfifo(SHELL,0666);
estado = open(SHELL, O_WRONLY);
}
else{
perror("Erro a abrir pipe de estado da shell : ");
exit(1);
}
}
write (estado, &j,1);
/************************************************/