linux 程序間通訊 共享記憶體

2021-10-09 09:58:41 字數 1134 閱讀 4655

shmget函式 來建立共享記憶體

linux 系統提供共享記憶體的函式

標頭檔案#include

#include

key引數是ftok函式的唯一關鍵字 用來在系統中標識一塊記憶體

size引數制定需要的共享記憶體 位元組數

shm***引數是記憶體的操作方式 有讀寫兩種 成功返回共享記憶體的id

shmat 引數是獲得id的起始位址

shmid 引數是共享記憶體的id

shmaddr引數引數指定了共享記憶體的位址 如果引數為0 表示讓系統決定共享記憶體的位址 獲取成功 函式返回對應的位址

shmdt 函式是從程式中分離一塊記憶體 引數shmaddr標識了要分離的共享記憶體的位址

上例子:

//寫入共享記憶體

#include

#include

#include

#include

intmain()

ptr=

(char*)

shmat

(shmid,0,

0);if

((void*)

-1==ptr)

strcpy

(ptr ,shm_str)

;shmdt

(ptr)

;return0;

}

//讀出共享記憶體

#include

#include

#include

#include

#include

intmain()

ptr=

shmat

(shmid,0,

0);if

((void*)

-1==0

)pritnf

("string in share memory :%s\n"

,ptr)

;shmdt

(ptr)

;return

0;

Linux程序間通訊 共享記憶體

共享記憶體是執行在同一臺機器上的程序間通訊最快的方式,因為資料不需要在不同的程序間複製。通常由乙個程序建立一塊共享記憶體區,其餘程序對這塊記憶體區進行讀寫。共享記憶體往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。首先要用的函式是shmget,它獲得乙個共享儲存識別符號。i nclu...

Linux程序間共享記憶體通訊

使用共享記憶體基本分四個步驟 獲得共享記憶體 shmget 對映共享記憶體shmat 解除對映shmdt 刪除共享記憶體shmctl 於是自己在網上找來了乙個例子看了下,並且用虛擬機器單獨跑了下共享記憶體的經典例程看了下,才知道了自己的問題出現 了 發現有時候只要自己親自將程式一步一步的去測,才知道...

Linux程序間通訊 共享記憶體

之前提到了程序間通訊的管道,訊息佇列,訊號量,然後其中訊號量是pv操作,操控的是乙個共享資源。在我們提到的ipc模組中,訊息佇列針對的是資料單元的資訊傳送,管道不屬於system v ipc的部分,所以按照乙個作業系統的整體來說,他應該也有著乙個關於位元組流的訊息傳輸,並且要比之前都要快,還要跟我們...