程序間通訊(IPC) 共享記憶體

2021-10-02 12:49:16 字數 1370 閱讀 3800

共享記憶體是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方法,乙個程序向共享記憶體區域寫入了資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。

把物理記憶體按要求申請出來給多個程序使用,共享記憶體訪問起來比較快,用起來比較簡單,不需要一些特別的函式。

共享記憶體實現分為兩個步驟:

1、建立共享記憶體,使用shmget函式。

2、對映共享記憶體,將這段建立的共享記憶體對映到具體的程序空間去,使用shmat函式。

建立

函式原型:

int shmget(key_t key,int size, int shm***)

key標識共享記憶體的鍵值:0或ipc_private,當key的取值為ipc_private,則函式shmget()將建立一塊新的共享記憶體。如果key的取值為0,而引數shm***中又設定ipc_private這個標誌,則同樣會建立一塊新的共享記憶體。

shm***:標誌位,一般使用ipc_creat | 0660 當共享記憶體已存在時則開啟這個共享記憶體,若不存在則建立乙個新的共享記憶體區,0660表示的是許可權,使用者可讀可寫。

返回值:如果成功,返回共享記憶體識別符號,如果失敗返回-1。

對映

函式原型:

int shmat(int shmid, char *shmaddr, int flag)

shmid: shmget函式返回的共享儲存識別符號。

flag: 決定以什麼方式來確定對映的位址(通常為0)

返回值:如果成功,則返回共享記憶體對映到程序中的位址,如果失敗,則返回-1。

為什麼需要對映?

因為共享記憶體需要對映到程序的不同位址才能使用。

脫離

當乙個程序不再需要共享記憶體時,需要把它從程序位址空間中脫離,使用shmdt函式。實際使用

1 #include 

2 #include

3 #include

4 #include

5 #include

6 #include

7 #include

8 #include

9 #include

10 #include

1112

intmain

(int argc,

char

**ar**)

1321

22if

(fork()

)30else

3738

return0;

39}

最終效果

程序間通訊IPC 共享記憶體

共享記憶體 共享記憶體 就是開闢一段物理記憶體使多個程序共享 是程序間最高效的傳輸方式 共享記憶體必須結合其他方式來實現程序間的同步 程式設計步驟 1 開闢一段共享記憶體 int shmget key t key,size t size,int shm key t key ftok a stat s...

IPC程序間通訊(共享記憶體)

共享記憶體區是最快的ipc形式。一旦這樣的記憶體對映到共享它的程序的位址空間,這些程序間資料傳遞不再涉及到核心,換句話說是程序不再通過執行進入核心的系統呼叫來傳遞彼此的資料。用管道或者訊息佇列傳遞資料,核心為每個ipc物件維護乙個資料結構 用共享記憶體傳遞資料 struct shmid ds inc...

程序間通訊IPC之 共享記憶體

每個程序各自有不同的使用者位址空間,任何乙個進 程的全域性變數在另乙個程序中都看不到,所以程序之間要交換資料必須通過核心,在核心中開闢一塊緩衝 區,程序1把資料從使用者空間拷到核心緩衝區,程序2再從核心緩衝區把資料讀走,核心提供的這種機制稱為程序間通訊 ipc,interprocess commun...