linux程序間的通訊 共享記憶體

2021-08-19 18:21:20 字數 2012 閱讀 1915

共享記憶體是最快的程序間通訊方式

解釋:一旦這樣的記憶體對映到共享它的程序的位址空間,這些程序間的資料傳遞不在涉及到核心,換句話說程序不再通過執行進入核心的系統呼叫來傳遞彼此的資料。
檢視建立的共享記憶體:ipcs -m刪除共享記憶體段:ipcrm -m keyshmget函式

int shmget(key_t key,//共享記憶體段名

size_t size,//寫入填申請空間的大小 開啟填0

int shm***);//建立ipc_creat|0644 開啟填0

**實現為:

1

#include

2#include

3#include

4#include 56

int main()

7

檢視是否建立:

shmctl函式

int shmctl(int shmid, //id

int cmd,//ipc_rmid

struct shmid_ds *buf);//0

返回值:成功返回0,失敗返回-1

**實現:

1

2#include

3#include

4#include

5#include 67

int main()

8

ftok函式:

key_t ftok(const

char *pathname,//必須存在的檔名

int proj_id);//低8位不能全為0

**實現:

1

#include

2#include 34

int main( void )5 8

結果為:

shmat函式:

void *shmat(int shmid,//id

const

void *shmaddr,//null

int shm***);//0

shmdt函式:

int shmdt(const

void *shmaddr);

**實現4,5兩個函式為:

write.c

1

#include

2#include

3#include

4#include

5#include

6#include 78

typedef

struct stu

9 stu_t;

1314

int main()

15 30 }

read.c

lude 3

#include

4#include

5#include

6#include

7typedef

struct stu

8 stu_t;

1213

int main()

14 24 }

執行兩個**如下:

Linux程序間通訊 共享記憶體

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

Linux程序間共享記憶體通訊

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

Linux程序間通訊 共享記憶體

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