共享記憶體是效率最高的程序間通訊方式 ,程序可以直接讀寫記憶體,不需要任何資料的拷貝。
多個程序共享一段記憶體,因此與需要依靠某種同步機制,如互斥鎖和訊號燈等。
建立開啟共享記憶體; shmget(): —–share memory get
對映共享記憶體; shmat(): —–share memory attach
撤銷共享記憶體; shmdt —- share memory delete
刪除共享記憶體物件;
1. 建立
int shmget(key_t key, int
size, int shm***);
key:共享記憶體的鍵值,程序間通過它訪問同乙個共享記憶體。(其中ipc_private用於當前程序的私有共享記憶體)
這個key一般通過key_t ftok(const char* filename, int flag);
來生成乙個key_t型別的key值。這樣當兩個或者多個程序通過同樣的filename
和flag
就可以實現記憶體的共享。
size:共享記憶體大小;(當記憶體沒有釋放,系統也不會**,只有手動或者重啟才能釋放, 因此,如果出現記憶體申請失敗,考慮這個原因)
shm***:同open函式中檔案的許可權位;
return: succes—共享記憶體段的識別符號; fail—- -1;
2. 對映
char *shmat(int shmid, const
void *shmaddr, int shm***);
shmid:要對映的記憶體識別符號(shmget返回值);
shmaddr: 將共享記憶體對映到指定的位址(0表示系統自動分配的位址,並把該段共享記憶體對映到呼叫它的程序的位址空間);
shm***:①shm_rdonly:共享記憶體唯讀; ②預設0:讀寫
return:
success— 被對映的段位址
fail— -1;
3. 解除
int shmdt(const
void *shmaddr);
shmaddr: 要解除的被對映的共享記憶體段位址(shmat返回值) linux程序通訊 共享記憶體
共享記憶體是ipc機制中的第二個。他允許連個不相關的程序訪問同一塊邏輯記憶體,能夠有效地實現兩個程序間資料傳遞。int shmget key t key,sizr t size,int shm 建立共享記憶體 key為共享記憶體段的命名,size為以位元組為單位的記憶體容量,shm 包含9位元許可權...
Linux程序通訊 共享記憶體
對於linux來講,不同程序之間的記憶體是不能讀寫的,乙個程序只能讀寫自己所屬的記憶體。a程序是不能讀寫b程序記憶體的?如果程式確實想通過記憶體交換資料怎麼辦?linux提供共享記憶體機制。共享記憶體是由核心處於多個程序間交換資訊的目的而留出的一塊記憶體區 段 共享記憶體也需要設定相關許可權的。這段...
Linux程序通訊 共享記憶體
共享記憶體 共享記憶體是一種最為高效的程序間通訊方式,在程序間通訊時核心專門的留出一塊記憶體區。在這段記憶體區可以由訪問程序將其對映到自己的私有位址空間。因此程序就可以直接讀寫這一塊記憶體區,極大的提高了效率。共享記憶體的步驟 1 建立共享記憶體 2 對映貢獻記憶體 原理 相關函式 shmget 建...