進程通信 之 管道 標準流管道


2、管道(無名管道):

       a、只能用於具有親緣關係的進程之間通信;

       b、半雙工模式,具有固定的讀端和寫端;

       c、管道不是普通文件,不屬於任何文件系統,只存在於內存中;

       d、當一個管道通過函數 int pipe(int fd[2]) 創建時,fd[0] 爲固定的讀端,fd[1] 爲固定的寫端;

       e、對管道的讀寫,其實就是對內核緩衝區的讀寫;

       注意:

       I、 如果所有指向該管道讀端的文件描述符都已經關閉,而寫端繼續寫,則會收到SIGPIPE信號,通常會導致進程異常終止;

       II、 如果所有指向該管道寫端的文件描述符都已經關閉,而讀端繼續讀,則讀端會繼續讀取完畢管道中的內容,讀完後再次讀取的時候,就會返回0 ,就像讀到文件末尾一樣;

       III、如果指向該管道的文件的讀端和寫端都沒有關閉,但是寫端沒有向管道中寫入數據,這時,讀端會繼續讀取管道中剩餘的數據,讀取完畢後,阻塞等待,直到管道中再有數據;

       IIII、如果指向該管道的讀端和寫端都沒有關閉,但是讀端不讀取任何數據,而寫端不斷寫入數據,當管道被寫滿時,就會阻塞等待;


3、標準流管道:

     帶有緩衝區

      函數: FILE* popen(char* command ,char* type);

                   int       pclose(FILE* stream);

     command 指的是路徑+文件名;

     type表示的是讀寫方式,只能是其中一種方式,不能讀寫同時進行,當參數是兩個時,只取第一個的值;


     wait4()被 pclose(FILE* stream)調用,等待管道進程運行結束,然後關閉文件流;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章