2015-05-08 146 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來避免阻塞。 –