共享記憶體 程序間通訊

2021-07-25 13:47:06 字數 3211 閱讀 9273

共享記憶體是ipc機制中的一種。顧名思義,它允許兩個不相關的程序訪問同一段記憶體,這是傳遞資料的一種非常有效的方式。

函式原形:

intshmget(key_t key, size_t size, int shm***);

函式功能:

建立或者獲取一塊共享記憶體。

所屬標頭檔案:

#include 

#include

返回值:

若成功,返回共享記憶體的識別符號id;若失敗,返回-1.

引數說明:

key:共享記憶體的鍵值。

size:共享記憶體的大小。

shm***:標誌,尤其是ipc_creat,直接建立一塊新的共享記憶體。

函式原形:

void*shmat(int shmid, const void *shmaddr, int shm***);

函式功能:

將shmid所標識的共享記憶體對映在程序的位址空間中。

所屬標頭檔案:

#include 

#include

返回值:

若成功,返回共享記憶體的對映位址;若失敗,返回-1.

引數說明:

shmid:共享記憶體的識別符號。

shmaddr:共享記憶體的位址。一般情況下為null,由系統 指定合適的位置。

shm***:標誌。若沒有特殊標誌,為0。

函式原形:

intshmdt(const void *shmaddr);

函式功能:

從程序位址空間中,斷開對映的共享記憶體

所屬標頭檔案:

#include 

#include

返回值:

若成功返回0,若失敗返回-1

引數說明:函式原形:

intshmctl(int shmid, int cmd, struct shmid_ds *buf);

函式功能:操作共享記憶體。

所屬標頭檔案:

#include 

#include

返回值:

若成功,根據操作返回相應數值;若失敗,返回-1。

引數說明:

shmid:共享記憶體的識別符號id。

cmd:要進行的操作。如刪除共享記憶體ipc_rmid

buf:獲取linux定義的描述共享記憶體的shmid_ds結構體,但一般不使用。設為null。

1、向共享記憶體中寫內容:

/* 本檔案關於共享記憶體的**,這是寫檔案 */

/* 首先,乙個程序將資料寫入共享記憶體中 */

/* 然後,另乙個程序將資料從共享記憶體中讀出來 */

/* read先執行 */

#include

#include

#include

#include

#include

#include

#define text_sz 2048 //2kb,資料長度

struct shared_usr_st

;void main()

//2、對映共享記憶體

shared_stuff = (struct shared_usr_st *)shmat(shmid, null, 0);

//做乙個強制轉換,沒有特殊標誌,標誌為0,系統自動分配位址

//3、迴圈

while (running)

獲取使用者輸入

fgets(buffer, text_sz, stdin);

將使用者輸入的字串放進記憶體

strncpy(shared_stuff -> some_text, buffer, text_sz);

shared_stuff -> writen_by_you = 1;//寫完了,可以開始讀了

if (strncmp(buffer, "end", 3) == 0)

//如果使用者輸入的字串為end,結束

running = 0;

}//4、脫離共享記憶體

shmdt((const

void *)shared_stuff);

}

2、從共享記憶體中讀內容

/* 本檔案關於共享記憶體的**,這是讀檔案 */

/* 首先,乙個程序將資料寫入共享記憶體中 */

/* 然後,另乙個程序將資料從共享記憶體中讀出來 */

/* read先執行 */

#include

#include

#include

#include

#include

#include

#define text_sz 2048 //2kb,資料長度

struct shared_usr_st

;void main()

}//4.脫離共享記憶體

shmdt((const

void *)shared_stuff);

//5.刪除共享記憶體

shmctl(shmid, ipc_rmid, null);

}

程序間通訊 共享記憶體

下面是自己寫的乙個簡單的共享記憶體的程序間通訊的例子。共享記憶體是用於程序間大量資料共享的一種方法。include include include include include include int main if buf1 shmat shmid,0,0 void 1 strcpy buf1,...

程序間通訊 共享記憶體

共享記憶體是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方式,乙個程序向共享記憶體區域寫入資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。共享記憶體實現分兩個步驟 建立共享記憶體,使用shmget函式 對映共享記憶體,使用shmat函式 共享記憶體是一種最為高...

程序間通訊 共享記憶體

共享記憶體允許兩個或更多程序共享一塊給定的儲存區,因為資料不需要在不同程序之間訪問,這是最快的一種ipc 傳輸資訊量很大,通過記憶體空間對映程序空間實現,若伺服器程序正在將資料放入共享儲存區,則在它做完這一操作之前,客戶程序不應取這些資料,通常訊號量用來實現對共享儲存訪問的同步。核心為每個共享儲存段...