C中的函数open()开始并且永不结束

C中的函数open()开始并且永不结束,c,unix,C,Unix,由于某种原因,这个程序在这些open()中的一个之后永远不会计算(不知道是哪一个)它只是暂停并一直在那里做一些事情。。。我遗漏了什么吗 编辑:我想感谢所有回答的人,在你们的帮助下,我能够更好地理解管道是如何工作的,并解决了我的问题。谢谢 正如sjnarv所指出的(我在完成回答之前没有对其进行注释…),一个open()写入FIFO的调用将被阻止,直到FIFO被另一个线程或另一个进程打开以便读取为止。你不能找出哪一个吗?可能是的,你遗漏了什么。这是什么,我们不能说,因为你不能给我们具体的代码是失败的

由于某种原因,这个程序在这些open()中的一个之后永远不会计算(不知道是哪一个)它只是暂停并一直在那里做一些事情。。。我遗漏了什么吗


编辑:我想感谢所有回答的人,在你们的帮助下,我能够更好地理解管道是如何工作的,并解决了我的问题。谢谢

正如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);
    /************************************************/