APUE讀書筆記-第17章-進階處理序間通訊

來源:互聯網
上載者:User

17.1 引言

*兩種進階IPC:基於STREAMS的管道(STREAMS-based pipe)以及UNIX域通訊端(UNIX domain socket)可以在進程間傳送開啟檔案描述符。服務進程可以使它們的開啟檔案描述符與指定的名字相關聯,客戶進程可以使用這些名字與服務進程通訊


17.2 基於STREAMS的管道

*可以用fattach函數給STREAMS管道一個檔案系統中的名字

*一旦STREAMS管道串連到檔案系統名字空間,那麼原來該名字的底層檔案就不再可訪問的。開啟改名字的任一進程將能訪問相應管道,而不是訪問原先的檔案。在調用fattach之前開啟底層檔案的任一進程可以繼續訪問該檔案

*雖然fattach函數可將任何種類的STREAMS檔案描述符與檔案系統中的一個名字相串連,但它最主要用於將一個名字給予一STREAMS管道

*在調用fdetach函數之後,先前依靠開啟path而能訪問STREAMS管道的進程仍可繼續訪問該管道,但是在此之後開啟path的進程將訪問駐留在檔案系統中的底層檔案


17.3 UNIX域通訊端

*UNIX域通訊端用於在同一台機器上啟動並執行進程之間的通訊

*UNIX域通訊端提供流和資料包兩種介面

*當我們將一地址綁定至UNIX域通訊端時,系統用該路徑名建立一類型為S_IFSOCK的檔案。該檔案僅用於向客戶進程告知通訊端名字。該檔案不能開啟,也不能由應用程式用於通訊。如果當我們試圖綁定地址時,該檔案已經存在,那麼bind請求失敗。當關閉通訊端時,並不自動刪除該檔案,所以我們必須確保在應用程式終止前,對該檔案執行解除連結操作


17.4 傳送檔案描述符

*當一個進程(通常是伺服器處理序)希望將一個描述符傳送給另一個進程時,它調用send_fd或send_err,等待接收描述符的進程(客戶進程)調用recv_fd


17.5 open伺服器版本1

*使用檔案描述符傳送技術,我們開發了一個open伺服器:一個由一個進程執行以開啟一個或幾個檔案的程式。該伺服器不是將檔案內容送回調用進程,而是送回一個開啟檔案描述符。這使該伺服器對任何類型的檔案(例如一個裝置或通訊端)而不單是普通檔案都能起作用。這也意味著,用IPC交換了最小量的資訊——從客戶進程到伺服器處理序傳送檔案名稱和開啟模式,而從伺服器處理序到客戶進程返回描述符。檔案內容不需用IPC傳送


17.6 open伺服器版本2

*open伺服器版本2是一個以守護進程方式啟動並執行open伺服器。用一個伺服器處理序處理所以客戶進程的請求。這一設計應該更加有效,因為沒有使用fork和exec



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.