進程間通信之“內存共享”的簡單實現

1. 共享內存的有效特點:

  1. 是所有進程間通信最快的
  2. 不提供任何的同步,互斥機制,(用戶可通過設置信號量來保證同步,互斥機制)
  3. 生命週期隨內核

2. 創建共享內存

int shmget(key_t key, size_t size, int shmflg)
這裏寫圖片描述
key : 可通過函數 key_t ftok( );申請到
size: 申請的大小,申請多少系統給多少,但系統內會以頁的倍數批准
shmflg:權限

3. 命令行查看,刪除共享內存

ipcs -m : 查看當前的共享內存
這裏寫圖片描述
ipcrm -m 要刪除的shmid : 刪除指定共享內存
這裏寫圖片描述

4. 接下來我們利用共享內存來實現進程間通信

共享內存實現進程間通信需要如下幾個步驟:
1. 創建共享內存(物理地址);
2. 共享內存(物理地址)映射到虛擬地址(既然要通信,就必須是兩個進程的通過頁表分別映射到虛擬地中)
3. 最後就可通過各自的虛擬地址訪問同一塊虛擬地址,來實現進程間通信。
這裏寫圖片描述
#####代碼:
1. 創建共享內存(獲取內存物理地址)
這裏寫圖片描述
2. 對server端映射並讀取內存數據
這裏寫圖片描述
3. 對client端映射並寫如數據
這裏寫圖片描述

結果:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章