1、/usr/src/include 下的 errno.h 標頭檔案下宣告了乙個全域性變數 errno ,每乙個unix函式在發生錯誤時都會設定 errno 。在多執行緒環境下,每乙個執行緒擁有自己的errno變數。 2、
為了便於移植,posix ipc名字必須以斜槓符開頭,並且不能再含有其他任何斜槓符。ipc的名字即是傳給函式 mq
_open, sem_
open,和shm
_open 的第乙個引數。此外,為了避免還有可能出現的移植問題,還應該將posix ipc名字的#diefne行放置於乙個容易修改的標頭檔案中。例如將#define mq_
name "/father" 置於**標頭檔案。
3、管道建立函式 int pipe(fd[2]) 位於unistd.h標頭檔案,其典型用途時用於兩個不同程序(父子程序)之間的通訊。 fd[0] 為讀端, fd[1] 為寫端。 程序首先建立出乙個管道,然後 fork ,程序各關閉乙個埠,構成封閉資料流。如果需要構造乙個雙向的管道,則在 fork 前需要建立兩個管道,程序各關閉每個管道的乙個埠,構成封閉的資料流向。 4、
管道由於沒有名字,因此只能用於有乙個共同祖先的各個程序之間。而每乙個 fifo 都有乙個路徑名與之關聯,從而可以允許沒有親緣關係的程序訪問統一 fifo 。 fifo 也叫「有名管道」。建立 fifo 的函式,int mkfifo(const char *pathname, mode
_t mode) 。mkfifo 已經隱含指定了o_
creat | o_excl,也就是說,要麼穿件乙個新的 fifo ,要麼返回乙個 eexist(如果所指定名字的fifo存在的話)。
5、管道與fifo的不同之處:管道的建立並開啟只需要乙個 pipe 函式,而建立並開啟乙個 fifo 則需要在 mkfifo 之後呼叫再呼叫 open 函式;管道在所有程序最終都關閉後自動消失,而 fifo 的名字則只有通過呼叫 unlink 才能從系統中刪除。
//建立兩個 fifo 舉例
#define fifo1 "/tmp/fifo.1"
#define fifo2 "/tmp/fifo.2"
#define file_mode s_irusr | s_iwusr | s_irgrp | s_iroth
...
if ((mkfifo(fifo1, file_mode) < 0) && (errno != eexist))
err_sys("can't create %s\n", fifo1);
if ((mkfifo(fifo2, file_mode) < 0) && (errno != eexist))
...read_fd = open(fifo1, o_ronly, 0);
write_fd = open(fifo2, o_wonly, 0);
IPC通訊 Posix共享記憶體1
共享記憶體區是最快的可用ipc形式。它允許多個不相關的程序去訪問同一部分邏輯記憶體。如果需要在兩個執行中的程序之間傳輸資料,共享記憶體將是一種效率極高的解決方案。一旦這樣的記憶體區對映到共享它的程序的位址空間,這些程序間資料的傳輸就不再涉及核心。這樣就可以減少系統呼叫時間,提高程式效率 共享記憶體是...
POSIX標準小結
1.posix posix 表示可移植作業系統介面 portable operating system inte ce 縮寫為 posix posix標準定義了作業系統應該為應用程式提供的介面標準,是ieee為要在各種unix作業系統上執行的軟體而定義的一系列api標準的總稱,其正式稱呼為ieee ...
POSIX和System V的比較 IPC函式彙總
當我們在linux系統中進行程序間通訊時,會發現例如共享記憶體,訊號量,訊息佇列等方式時,會發現有system v以及poxis兩種型別。因此,我們 一下system v和poxis到底代表著什麼意義。一.posix posix portable operating system inte ce f...