物件:共享記憶體(share memory),訊息佇列(message quene),訊號燈(semaphore)
共享記憶體:特點:(1)是一種最為高效的程序間的通訊的方式,程序可以直接讀寫,而不需要任何資料的拷貝
(2)為了在程序間交換訊息,核心專門留出了一塊記憶體區,可以由需要訪問的程序將其對映
到自己的私有位址空間
(3)程序就可以直接讀寫這一記憶體區而不需要進行資料的拷貝,從而提高效率
(4)由於多個程序共享一段記憶體,因此需要一些共享機制,比如:互斥鎖和訊號量等
實現步驟:
(1)建立或開啟記憶體
(2)對映共享記憶體,即把指定的共享記憶體對映到程序的位址空間用於訪問
(3)撤銷共享記憶體對映
(4)刪除共享記憶體對映
int shmget(key_t key,int size,int shm***);
函式引數:ipc_private或ftok
size :共享記憶體區的大小
shm***:同open函式的許可權位,也可以用8進製表示法
返回值:成功返回記憶體段識別符號,
出錯返回-1
void *shmat(int shmid,const void *shmaddr,int shm***);
函式引數:shmid:要對映的共享記憶體區的識別符號
shmaddr:將共享記憶體對映到指定位置(若為null,則表示由系統自動完成對映)
shm***:shm_rdonly(共享記憶體唯讀),預設0(共享記憶體可讀可寫)
出錯返回-1
int shmdt(const void *shmaddr);
函式返回值: 0成功, -1出錯
int shmclt(int shmid,int cmd,struct shmid_ds *buf)
函式引數:shmid:要操作的共享記憶體識別符號
cmd:ipc_stat(獲取物件屬性)
ipc_set(設定物件屬性)
ipc_rmid(刪除物件)
buf:指定ipc_stat/ipc_set時用以儲存/設定屬性
函式返回值 0成功,-1出錯
程序間通訊方式 共享記憶體
所有的函式共用標頭檔案 include include include 3.1建立共享記憶體 shmget 函式 int shmget key t key,size t size,int shm 成功返回共享記憶體的id,出錯返回 1 1 第乙個引數key是長整型 唯一非零 系統建立ipc通訊 訊息...
Linux 程序間通訊之共享記憶體方式
共享記憶體方式 從物理記憶體裡面拿出來一部分作為多個程序共享。共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入資料,共享這個記憶體的所有程序都可以立即看到其中內容。共享記憶體實現步驟 一 建立共享記憶體,使用 shmget 函式。二 對映共享記憶體,將這段建立的共享記憶體對映...
Linux 程序間通訊之共享記憶體方式
linux 程序間通訊之共享記憶體方式。共享記憶體方式 從物理記憶體裡面拿出來一部分作為多個程序共享。共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入資料,共享這個記憶體的所有程序都可以立即看到其中內容。共享記憶體實現步驟 一 建立共享記憶體,使用shmget函式。二 對映共...