7分鐘前 陜西玻纖增強聚丙烯FRPP管品牌詢價咨詢「星馳」[星馳60b5ccc]內容:在主進程中利用fork()函數創建一個子進程,這樣父子進程同時擁有對同一管道的讀寫句柄,因為管道沒有提供鎖定的保護機制,所以必須決定數據的流動方向,然后在相應進程中關閉不需要的句柄。這樣,就可以使用read()和write()函數來對它進行讀寫操作了。使用無名管道進行進程間通信的步驟概述如下:①創建所需的管道;②生成(多個)子進程;③關閉/文件描述符,使之與相應的管道末端相聯系;

若管道為空,且寫端文件描述字未關閉,則被阻塞。若管道寫端已關閉,則返回0。若管道不為空,分兩種情況:(設管道中實際有m個字節),如n>=m,則讀m個;如果n<m則讀取n個。實際讀取的數目作為read的返回值。2.2.4 關閉管道close函數關閉寫端則導致讀端read調用返回0;關閉讀端,則導致寫端write調用返回-1,errno被設為EPIPE,在寫端write函數退出前,進程還會收到SIGPIPE信號(默認處理是終止進程,該信號可以捉)。

文件描述符的dup2intdup2(intfdl,intfd2);文件描述符fdl到fd2。fd2可以是空閑的文件描述符,如果fd2是已打開文件,則關閉fd2;如果fd1不是有效的描述符,則不關閉fd2,調用失敗。2.3 關于無名管道需要注意的幾個問題①管道是半雙工方式,數據只能單向傳輸。如果要在兩個進程之間相互傳送數據,就要建立兩條管道。②pipe()調用必須在調用fork()以前進行,否則子進程將無法繼承文件描述符。③使用無名管道互相連接的任意進程必須位于一個相關的進程家族里。
