POSIX和System V的比較/IPC函式彙總
當我們在linux系統中進行程序間通訊時,會發現例如共享記憶體,訊號量,訊息佇列等方式時,會發現有System v以及POXIS兩種型別。因此,我們探究一下System v和POXIS到底代表著什麼意義。
一.POSIX
POSIX(Portable Operating System Interface for Computing Systems)是由IEEE 和ISO/IEC 開發的一簇標準。該標準是基於現有的UNIX 實踐和經驗,描述了作業系統的呼叫服務介面,用於保證編制的應用程式可以在原始碼一級上在多種作業系統上移植執行。它是在1980 年早期一個UNIX 使用者組(usr/group)的早期工作的基礎上取得的。該UNIX 使用者組原來試圖將AT&T 的系統V 和Berkeley CSRG的BSD 系統的呼叫介面之間的區別重新調和整合,從而於1984 年產生了/usr/group 標準。1985 年,IEEE作業系統技術委員會標準小組委員會(TCOS-SS)開始在ANSI 的支援下責成IEEE 標準委員會制定有關程式原始碼可移植性作業系統服務介面正式標準。到了1986 年4 月,IEEE 就制定出了試用標準。第一個正式標準是在1988 年9 月份批准的(IEEE 1003.1-1988),也既以後經常提到的POSIX.1 標準。
POSIX(Portable Operating System Interface)可移植作業系統介面,這樣的簡寫完全是為了和UNIX讀起來更像而已。它是由IEEE(電子和電氣工程師協會)開發,由ANSI(美國國家標準化學會)和OSI(國際標準化組織)兩個機構標準化。由於早起各廠家對UNIX的開發各自為政,互相競爭,造成UNIX版本混亂,給軟體移植造成困難,不利於UNIX長期發展,基於此,IEEE開發了POSIX,在原始碼級別定義了一組UNIX作業系統介面。
目前POSIX已經成為類UNIX(Unix-like)作業系統程式設計的通用介面,極大方便了類UNIX環境下應用程式原始碼級的可移植性。Glibc(GNU C Library),即C執行庫,是Linux系統中最底層的API,它就是完全按照POSIX標準編寫的。
POSIX版本
1997年之前版本
POSIX.1(IEEE Std 1003.1-1988): Core Services
POSIX.1b (IEEE Std 1003.1b-1993): Real-time extensions
POSIX.1c(IEEE Std 1003.1c-1995) :Threads extensions
POSIX.2(IEEE Std 1003.2-1992) :Shell and Utilities
1997年之後的版本
POSIX.1-2001( IEEE Std 1003.1-2001) POSIX.1-2004 (with two TCs)(IEEE Std 1003.1-2004 POSIX.1-2008 (with one TC))( IEEE Std 1003.1, 2013)
二.Sytem V
System V, 曾經也被稱為 AT&T System V,是Unix作業系統眾多版本中的一支。它最初由 AT&T 開發,在1983年第一次釋出。一共發行了4個 System V 的主要版本:版本1、2、3 和 4。System V Release 4,或者稱為SVR4,是最成功的版本,成為一些UNIX共同特性的源頭,例如 ”SysV 初始化指令碼“ (/etc/init.d),用來控制系統啟動和關閉,System V Interface Definition (SVID) 是一個System V 如何工作的標準定義。
AT&T 出售執行System V的專有硬體,但許多(或許是大多數)客戶在其上執行一個轉售的版本,這個版本基於 AT&T 的實現說明。流行的SysV 衍生版本包括 Dell SVR4 和 Bull SVR4。當今廣泛使用的 System V 版本是 SCO OpenServer,基於 System V Release 3,以及SUN Solaris 和 SCO UnixWare,都基於 System V Release 4。
System V 是 AT&T 的第一個商業UNIX版本(UNIX System III)的加強。傳統上,System V 被看作是兩種UNIX”風味”之一(另一個是 BSD)。然而,隨著一些並不基於這兩者程式碼的UNIX實現的出現,例如 Linux 和 QNX, 這一歸納不再準確,但不論如何,像POSIX這樣的標準化努力一直在試圖減少各種實現之間的不同。
System V(System Five),是Unix作業系統眾多版本中的一支,就是當年UNIX廠家混戰中,比較強大的一個諸侯王,最初由 AT&T 開發,在1983年第一次釋出。一共發行了4個 System V 的主要版本:1、2、3 和 4,比如:System V Release 4,或者稱為SVR4,是最成功的版本,比如現今依然使用的作業系統SUN Solaris 和 SCO UnixWare,都基於 System V Release 4的,SUN公司我想大家都知道吧,依然是現在商用伺服器作業系統重要提供商,但是我們常用的Linux作業系統並不是基於此的,但是這裡要感謝POSIX這樣標準化的努力,是它相容了絕大部分System V的規格,減少了各類作業系統之間移植的麻煩。
三.使用
照上面所說的System V和POXIS是一種應用於系統的介面協議,POXIS相對於System V可以說是比較新的標準,語法相對簡單。
在linux/unix系統程式設計中支援System V和POXIS。我們常見的一個名詞就是POSIX IPC和
System V IPC。IPC的全稱是Inter-process Comminication,就是程序間通訊。
在POSIX IPC中,在POSIX IPC中,每個IPC物件是有名稱的,而且名稱是一個很重要的概念,posix ipc使用ipc的名稱作為ipc的標識。mq_open sem_open shm_open三個函式的第一個引數就是這個名稱,這個名稱不一定是在檔案系統中存在的名稱。 要使用IPC物件,需要建立或者開啟,這與檔案操作類似,主要是使用mq_open、sem_open、shm_open 函式操作。在建立或者開啟ipc物件時需要指定操作的mode,例如O_RONLY、O_WRONLY、O_RDWR、O_CREAT、O_EXCL 等,IPC物件是有一定許可權的,與檔案的許可權類似。
在System V IPC中,System v ipc中有一個重要的型別是key_t,在msget、semget、shmget函式操作中都需要利用這個型別是引數。
四.POSIX和SytemV函式彙總
system V IPC函式彙總
POSIX IPC函式彙總
從IPC鍵生成IPC識別符號