ipc物件包括:是活動在核心級別的一種
程序間通訊
的工具,是一種機制。
目前linux也支援這三種機制:共享記憶體、訊息佇列、訊號燈集。
1、ipc
struct ipc_perm;
key比較關鍵,是識別這個共享通道的鑰匙。
在這三種機制中都會用到這個建立的key;
一般用 ftok這個函式來建立鑰匙。
key_t ftok( char * fname, int id )
例如:if ((key = ftok(".", 's')) < 0)
這樣就產生了乙個key,其實也可以自己定義key,但是這樣定義的key不安全。所以盡量用ftok來產生key。
2、共享記憶體:
它是一種最為高效的程序間通訊方式,程序可以直接讀寫記憶體,不需要任何資料的拷貝為了在多個程序間交換資訊,
核心專門留出了一塊記憶體區,可以有需要訪問的程序將其對映到自己的私有位址空間,所以核心就不需要資料拷貝的操作,
這樣子一來就提高了程序的效率(核心來處理問題比程序來的快)。
而實現共享記憶體有2個步驟:1、在核心中建立出一塊共享記憶體。(shmget())
2、將共享記憶體對映到程序的對映區。(shmat())
3、撤銷對映的操作。(shmdt())
3、訊息佇列:
顧名思義,訊息佇列就是一些訊息的列表,使用者可以在佇列中新增和讀取訊息等操作。
在某些方面(主要是讀取操作)與fifo的一些特性很相像,甚至可以說就是一樣的。但是比fifo更有優勢,因為它可以實現訊息的隨機查詢。
這些訊息存在核心中,都有乙個「佇列id」來標識。
實現訊息佇列有4步驟:1、建立或開啟佇列(msgget()),建立佇列的數量受到系統訊息佇列的限制。
2、新增訊息(msgsnd()),把訊息新增到已開啟的訊息佇列的末尾。
3、讀取訊息(msgrcv()),根據「佇列id」取走訊息佇列中指定的訊息。
4、控制訊息佇列(msgctl()),訊息佇列的移除撤銷。
linux 訊息佇列 和 共享記憶體
1.基本知識 存在於核心中2.基本流程及函式 傳送 接收 1 申請key值 2 建立 開啟 訊息佇列 3 傳送訊息 建立結構體 typedef struct msg t 1 key t key ftok 5 if key 0 2 int msgid msgget key,ipc creat 0777...
IPC 訊息佇列
include int msgget key t key,int msg 返回值 若成功,返回訊息佇列id 若出錯返回 1 與其他ipc機制一樣,需要提供乙個鍵值key來命名某個特定的訊息佇列。可通過ftok 來生成。msg 表示訊息佇列訪問許可權。可與兩個巨集配合進行操作 ipc creat 如果...
IPC 訊息佇列
訊息佇列可以認為是乙個訊息列表。執行緒可以往訊息佇列中放置訊息或者取出訊息。每個訊息都是一條記錄,由傳送者賦予乙個優先順序。乙個程序在往乙個訊息佇列中寫入訊息之前,不需要有某個程序在該佇列上等待訊息到達 這跟管道和fifo是相反的 訊息佇列具有隨核心的持續性,也就是說在核心重新啟動之前,不管發訊息的...