共享記憶體是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 傳輸資訊量很大,通過記憶體空間對映程序空間實現,若伺服器程序正在將資料放入共享儲存區,則在它做完這一操作之前,客戶程序不應取這些資料,通常訊號量用來實現對共享儲存訪問的同步。核心為每個共享儲存段...