共享記憶體,主要是實現程序間大量資料的傳輸。所謂共享記憶體,即在記憶體中開闢一段特殊的記憶體空間,多個程序可互斥訪問,該記憶體空間具有自身特有的資料結構。
共享記憶體的資料結構如下 - struct shmid_ds:
/* come from /usr/include/linux/shm.h */
/* obsolete, used only for backwards compatibility and libc5 compiles */
struct shmid_ds ;
多個程序在使用此共享記憶體空間時候,必須在程序位址空間與共享記憶體位址空間之間建立連線,即將共享記憶體空間掛載到程序中;共享記憶體是由乙個程序開闢,其它任何程序都可以掛載;
共享記憶體並不會隨著程序的退出而消失,因此最後不使用此記憶體空間時,必須要手動刪除。
macrono.descriptionhead fileipc_creat01000若key記憶體段不存在,則建立;否則返回記憶體首位址/usr/include/linux/ipc.h返回值:ipc_excl02000若key記憶體段存在,則返回錯誤
ipc_nowait04000不等待直接返回
shm_r0400可讀/usr/include/linux/shm.h
shm_w0200可寫/usr/include/linux/shm.h
成功:共享記憶體空間的標誌 shm_id
失敗:-1
macrono.descriptionreturnipc_rmid0刪除0返回值:ipc_set1設定 ipc_perm 引數0
ipc_stat2獲取 ipc_perm 引數
ipc_info3若
ipcs
命令shm_lock11鎖定共享記憶體段0
shm_unlock12解鎖共享記憶體段0
成功:失敗:-1
macrono.descriptonremind-0預設有讀寫許可權常用兩個程序通過共享記憶體傳輸資料,因共享記憶體不可同時讀寫,因此採用二元訊號量進行程序互斥,具體操作如下:shm_rdonly010000唯讀
shm_rdn020000round attach address to shmlba boundary
shm_remap040000take-over region on attach
Linux程序間通訊 共享記憶體
共享記憶體是執行在同一臺機器上的程序間通訊最快的方式,因為資料不需要在不同的程序間複製。通常由乙個程序建立一塊共享記憶體區,其餘程序對這塊記憶體區進行讀寫。共享記憶體往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。首先要用的函式是shmget,它獲得乙個共享儲存識別符號。i nclu...
Linux程序間共享記憶體通訊
使用共享記憶體基本分四個步驟 獲得共享記憶體 shmget 對映共享記憶體shmat 解除對映shmdt 刪除共享記憶體shmctl 於是自己在網上找來了乙個例子看了下,並且用虛擬機器單獨跑了下共享記憶體的經典例程看了下,才知道了自己的問題出現 了 發現有時候只要自己親自將程式一步一步的去測,才知道...
Linux程序間通訊 共享記憶體
之前提到了程序間通訊的管道,訊息佇列,訊號量,然後其中訊號量是pv操作,操控的是乙個共享資源。在我們提到的ipc模組中,訊息佇列針對的是資料單元的資訊傳送,管道不屬於system v ipc的部分,所以按照乙個作業系統的整體來說,他應該也有著乙個關於位元組流的訊息傳輸,並且要比之前都要快,還要跟我們...