程序間通訊 共享記憶體

2021-09-16 14:08:06 字數 1416 閱讀 8313

而其他的則是需要複製4次:伺服器將輸入檔案讀入自己的程序空間,再從自己的程序空間寫入管道/訊息佇列等;客戶程序從管道/訊息佇列中讀出資料到自己的程序空間,最後輸出到客戶指定的檔案中;

/*成功時返回乙個指向共享記憶體的第乙個位元組的而指標,失敗返回-1

第一次建立共享記憶體段時,它不能被任何程序訪問。要想啟用對該共享記憶體的訪問,必須將其連線到乙個程序的位址空間中。

shm_id:由shmget返回的共享記憶體識別符號

shm_addr:指定的是共享記憶體連線到當前程序中的位址位置。通常是乙個空指標,表示讓系統來選擇共享記憶體出現的位址

*/void

*shmat

(int shm_id,

const

*shm_ddr,

int shm***);/*

控制函式

command:

ipc_stat

ipc_set

ipc_rmid:刪除共享記憶體段

*/void

shmctl

(int shm_id,

int cmd,struct shmid_ds *buf);/*

將共享記憶體從當前程序中分離,注意:將共享記憶體分離並未刪除它,只是使得該共享記憶體對當前程序不再可用

*/int

shmdt

(const

void

*shm_addr);/*

建立共享記憶體,成功返回乙個非負整數(共享記憶體識別符號),失敗返回-1

key:為共享記憶體段命名

size:以位元組為單位指定需要共享的記憶體容量

shm***:由ipc_creat和許可權標誌按位或才能建立乙個新的共享記憶體段

*/int

shmget

(ket_t key,sizr_t size,

int shm***)

;由於共享記憶體並未提供同步機制,所以我們通常需要用其他的機制來同步對共享記憶體的訪問。

示例:生產者

b程式:消費者

通過ipcs -m檢視共享記憶體,ipcm -m刪除共享記憶體

程序間通訊 共享記憶體

下面是自己寫的乙個簡單的共享記憶體的程序間通訊的例子。共享記憶體是用於程序間大量資料共享的一種方法。include include include include include include int main if buf1 shmat shmid,0,0 void 1 strcpy buf1,...

程序間通訊 共享記憶體

共享記憶體是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方式,乙個程序向共享記憶體區域寫入資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。共享記憶體實現分兩個步驟 建立共享記憶體,使用shmget函式 對映共享記憶體,使用shmat函式 共享記憶體是一種最為高...

程序間通訊 共享記憶體

共享記憶體允許兩個或更多程序共享一塊給定的儲存區,因為資料不需要在不同程序之間訪問,這是最快的一種ipc 傳輸資訊量很大,通過記憶體空間對映程序空間實現,若伺服器程序正在將資料放入共享儲存區,則在它做完這一操作之前,客戶程序不應取這些資料,通常訊號量用來實現對共享儲存訪問的同步。核心為每個共享儲存段...