進程間通訊---共享內存及信號

1.查看系統中的共享存儲段html

ipcs -m
2.刪除系統中的共享存儲段函數

ipcrm -m [shmid]
3.shmget ( ):建立共享內存操作系統

int shmget(key_t key, size_t size, int shmflg);
[參數key]:由ftok生成的key標識,標識系統的惟一IPC資源。.net

[參數size]:須要申請共享內存的大小。在操做系統中,申請內存的最小單位爲頁,一頁是4k字節,爲了不內存碎片,咱們通常申請的內存大小爲頁的整數倍。指針

[參數shmflg]:若是要建立新的共享內存,須要使用IPC_CREAT,IPC_EXCL,若是是已經存在的,可使用IPC_CREAT或直接傳0。htm

[返回值]:成功時返回一個新建或已經存在的的共享內存標識符,取決於shmflg的參數。失敗返回-1並設置錯誤碼。blog

4.shmat ( ):掛接共享內存進程

void *shmat(int shmid, const void *shmaddr, int shmflg);
[參數shmid]:共享存儲段的標識符。ip

[參數*shmaddr]:shmaddr = 0,則存儲段鏈接到由內核選擇的第一個能夠地址上(推薦使用)。內存

[參數shmflg]:若指定了SHM_RDONLY位,則以只讀方式鏈接此段,不然以讀寫方式鏈接此段。

[返回值]:成功返回共享存儲段的指針(虛擬地址),而且內核將使其與該共享存儲段相關的shmid_ds結構中的shm_nattch計數器加1(相似於引用計數);出錯返回-1。

5.shmdt ( ):去關聯共享內存

當一個進程不須要共享內存的時候,就須要去關聯。該函數並不刪除所指定的共享內存區,而是將以前用shmat函數鏈接好的共享內存區脫離目前的進程。

int shmdt(const void *shmaddr);
[參數*shmaddr]:鏈接之後返回的地址。

[返回值]:成功返回0,並將shmid_ds結構體中的 shm_nattch計數器減1;出錯返回-1。

6.shmctl ( ):銷燬共享內存

int shmctl(int shmid, int cmd, struct shmid_ds *buf);
[參數shmid]:共享存儲段標識符。

[參數cmd]:指定的執行操做,設置爲IPC_RMID時表示能夠刪除共享內存。

[參數*buf]:設置爲NULL便可。

[返回值]:成功返回0,失敗返回-1。
---------------------
做者:YPT_victory
來源:CSDN
原文:https://blog.csdn.net/ypt523/article/details/79958188
版權聲明:本文爲博主原創文章,轉載請附上博文連接!

 

參考:

https://blog.csdn.net/ypt523/article/details/79958188

https://www.cnblogs.com/LUO77/p/5816326.html

相關文章
相關標籤/搜索