一、雞肋
1、共用記憶體是被多個進程共用的一部分記憶體。共用記憶體是進程間共用資料的一種最快的的方法,一個進程向共用記憶體地區寫入了資料,共用這個記憶體地區的所有進程就可以立刻看到其中的內容。
2、共用記憶體的通訊方式,實現比較簡單,不需要專門的函數如:read、write
二、共用記憶體的實現:
1、共用記憶體實現分為兩個步驟:
(1)建立共用記憶體:shmget(),shared memory get獲得一塊共用記憶體
int shmget(key_t key,int size,int shmflg);
i、參數:
key,標識共用記憶體的索引值=
==0/IPC_PRIVATE,當key的取值為IPC_PRIVATE,則函數shmget()將建立一塊新的共用記憶體
==0,如果key的取值為0,而參數shmflg中又設定IPC_PRIVATE這個標識,則同樣會建立一塊新的共用記憶體
size,建立共用記憶體的大小
ii、傳回值:
==如果成功,返回共用記憶體標識符;如果失敗,返回-1
(2)映射共用記憶體:shmat(),shared memory at將這段建立的共用記憶體映射到具體的進程空間中去
void *shmat(int shmid, const void *shmaddr, int shmflg);
i、參數:
==shmid,這個參數是由shmget函數返回的共用記憶體標識符
==flag,決定以什麼方式來確定映射的地址(通常為0)
==shmaddr,指定共用記憶體的映射地址,通常我們設定為0,表示由系統幫我們去找一塊可用的共用記憶體位址
ii、傳回值:
==如果成功,則返回共用記憶體映射到進程中的地址;如果失敗,則返回-1。以後我麼對共用記憶體的操作就是對這個傳回值的操作。
(3)解除共用記憶體:shamdt(),shared memory detach,
int shamdt(int shmid)
當一個進程不再需要共用記憶體時,需要把它從進程地址空間中脫離