C++下shm共享內(nèi)存模塊
我的第一個服務(wù)器項目分了前后端,而其中前后端的數(shù)據(jù)通訊就是使用shm共享內(nèi)存的方式,所以對于這塊會比較有感覺。
1、共享內(nèi)存是在多個進程之間共享內(nèi)存區(qū)域的一種進程間的通信方式。
2、它是在多個進程間通過對指定內(nèi)存段進行映射實現(xiàn)內(nèi)存共享的。
3、這是IPC最快捷的方式,因為它沒有中間商賺差價。
4、多個進程間共享的是同一塊物理空間,僅僅是掛載地址不同而已,因此不需要進行復制,可以直接使用這段空間。
1、創(chuàng)建共享內(nèi)存函數(shù)shmget()
/*shmget函數(shù)用于創(chuàng)建一個新的內(nèi)存段,或者打開一個原有的內(nèi)存段*/ #include
1
2
3
4
參數(shù)釋義:shmflg取值范圍:IPC_CREAT、IPC_EXCL
2、共享內(nèi)存掛載到進程下函數(shù)shmat()
//該函數(shù)用于將開辟好的共享內(nèi)存掛載到本進程名下 #include
1
2
3
4
參數(shù)釋義:
shmid:上面那個函數(shù)的返回值。
shmaddr:一般放0,系統(tǒng)就會自己去找一塊為映射的地址。
3、斷開共享內(nèi)存連接函數(shù)shmdt()
//從進程中刪除共享內(nèi)存與從內(nèi)核中刪除共享內(nèi)存是兩個概念 #include
1
2
3
4
4、共享內(nèi)存控制函數(shù)shmctl()
#include
1
2
3
參數(shù)釋義:
cmd:IPC_STAT:獲取內(nèi)存段的shmid_ds結(jié)構(gòu),用buf傳出。
IPC_SET:設(shè)置內(nèi)存段中的shmid_ds結(jié)構(gòu)下的ipc_perm成員的值,從buf里面獲得。
IPC_RMID:標記某個內(nèi)存段,已備刪除。(只有當連接該內(nèi)存段的最后一個進程與他斷開連接之后才會執(zhí)行刪除)
struct shmid_ds { struct ipc_perm msg_perm; //后面寫 size_t shm_segsz; //段大小,以字節(jié)為單位 time_t shm_atime; //最后掛載時間 time_t shm_dtime; //最后卸載時間 time_t shm_ctime; //最后修改時間 pid_t shm_cpid; //建立者 pid_t shm_lpid; //最后一個at/dt操作的進程PID shmatt_t shm_nattch; //現(xiàn)掛載數(shù)量 ··· } //下面這個是關(guān)鍵 struct ipc_perm { key_t key; //鍵值 uid_t uid; gid_t gid; //用戶GID uid_t cuid; gid_t cgid; //建立者GID unsigned short mode;//權(quán)限 unsigned short seq; //序列號 }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
我的服務(wù)器shm模塊
提取碼:r3ne
C++ 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。