|
管道的工作模式管道以先進(jìn)先出模式存儲(chǔ)一定數(shù)量的數(shù)據(jù)。使用管道時(shí),一個(gè)進(jìn)程從管道的一端寫(xiě)入,另一個(gè)進(jìn)程從管道的另一端讀取。在主進(jìn)程中,fork()函數(shù)用于創(chuàng)建子進(jìn)程,以便父進(jìn)程和子進(jìn)程同時(shí)具有對(duì)同一管道的讀寫(xiě)句柄。由于管道不提供鎖定保護(hù)機(jī)制,因此必須確定數(shù)據(jù)的流向,然后在相應(yīng)的過(guò)程中關(guān)閉不必要的句柄。這樣,就可以使用read()和write()函數(shù)對(duì)其進(jìn)行讀寫(xiě)。使用匿名管道進(jìn)行進(jìn)程間通信的步驟概述如下: ① 創(chuàng)建所需的管道; ② 生成(多個(gè))子流程; ③ 關(guān)閉/復(fù)制文件描述符到管道的對(duì)應(yīng)端; ④ 關(guān)閉不必要的管端; ⑤ 開(kāi)展溝通活動(dòng); ⑥ 關(guān)閉所有剩余的打開(kāi)文件描述符 ⑦ 等待子進(jìn)程完成。 由于read()函數(shù)和write()函數(shù)對(duì)流水線(xiàn)操作有阻塞作用,可以保證一個(gè)進(jìn)程必須先寫(xiě),然后另一個(gè)進(jìn)程才能讀,從而實(shí)現(xiàn)父子進(jìn)程的同步。 |