天天看點

《UNIX網絡程式設計 卷2:程序間通信(第2版)》——1.9 小結

本節書摘來自異步社群《unix網絡程式設計 卷2:程序間通信(第2版)》一書中的第1章,第1.9節,作者:【美】w. richard stevens著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

ipc傳統上是unix中一個雜亂不堪的領域。雖然有了各種各樣的解決辦法,但沒有一個是完美的。我們的讨論分成4個主要領域:

(1)消息傳遞(管道、fifo、消息隊列);

(2)同步(互斥鎖、條件變量、讀寫鎖、信号量);

(3)共享記憶體區(匿名共享記憶體區、有名共享記憶體區);

(4)過程調用(solaris門、sun rpc)。

我們考慮單個程序中多個線程間的ipc以及多個程序間的ipc。

各種類型ipc的持續性可以是随程序持續的、随核心持續的或随檔案系統持續的,這取決于ipc對象存在時間的長短。在為給定的應用選擇所用的ipc類型時,我們必須清楚相應ipc對象的持續性。

各種類型ipc的另一個特性是名字空間,也就是使用ipc對象的程序和線程辨別各個ipc對象的方式。各種類型的ipc有些沒有名字(管道、互斥鎖、條件變量、讀寫鎖),有些具有在檔案系統中的名字(fifo),有些具有将在第2章中講述的posix ipc名字,有些則具有其他類型的名字(将在第3章中講述的system v ipc鍵或辨別符)。典型做法是:伺服器以某個名字建立一個ipc對象,客戶則使用該名字通路同一個ipc對象。

本書中所有源代碼使用1.6節中講述的包裹函數來縮短篇幅,同時達到檢查每個函數調用是否傳回錯誤的目的。我們的包裹函數都以一個大寫字母開頭。

ieee posix标準一直是多數廠家努力遵循的标準,其中posix.1定義了通路unix的基本c接口,posix.2定義了标準指令。然而商業标準也在迅速地吸納并擴充posix标準,著名的有open group的unix标準,例如unix 98。