2015-05-08 95 views
0

当前正在使用C中的命名管道进行分配,我需要能够读取和写入管道。这是我困惑的地方。我知道有两种不同类型的管道(或不同的方式来制造它们)。我知道有一个管道功能可以读写匿名管道。在我们的作业文档中,我了解到您使用mkfifo在目录中创建了一个命名管道。但是,它也表示你可以像使用普通文件那样使用该管道,但是当我尝试使用它时,它会挂起。这里是我的代码:在C中读取/写入UNIX管道

#include <stdio.h> 

int main(int argc, char * argv[]){ 

    FILE *fp; 
    fp = fopen("pipe", "r"); 
    char c = 'o'; 

    fputc(c, fp); 
    fclose(fp); 

} 

那么,管道不能以这种方式实际可用?任何帮助是极大的赞赏!谢谢

+3

你正在尝试写入你打开的** **''r''标志到'fopen()'的只读**。 –

回答

3

到FIFO /命名管道的可写文件公开呼叫(fopen("pipe", "w")open("pipe", O_WRONLY)等)将挂起,直到打开管道读取。

+0

而且,相反,从命名管道(FIFO)读取的开放将挂起,直到有一位作者。如果您打开读取和写入,它不会挂起,因为您既有读写器也有写入器。您也可以使用O_NONBLOCK,IIRC来避免阻塞。 –