共享存儲函數

共享存儲

共享存儲允許兩個或多個進程共享一個給定的存儲區。數據不需要在客戶進程
和服務器進程之間複製,因此這是最快的一種進程間通信的方式。使用的竅門是
多個進程訪問存儲區時,需要採取一定的同步控制。


獲取一個共享存儲標誌:shmget函數
#include<sys/shm.h>
int shmget(key_t key, size_t szie, inf flag);
成功--共享存儲ID,出錯-- -1


參數:
key  -- IPC對象對應的鍵
size -- 共享存儲段的長度,以字節位單位,通常爲系統頁長的整數倍。
flag -- 共享存儲段的權限


對共享存儲段的控制:shmctl函數
#include<sys/shm.h>
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
成功--0,出錯-- -1


參數:
cmd --  1)IPC——STAT 將此段的shmid_ds結構存儲到buf數組裏面。
2)IPC_SET  將buf結構裏面的值設置到本段相關的shmid_ds結構中的
  shm_perm.uid,shm_perm.gid 和 shm_perm.mode.此操作只能是有效
  用戶ID等於shm_perm.cuid 或 shm_perm.uid 或超級用戶。
3)IPC_RMID  從系統中刪除該共享存儲段。除非該段的最後一個進程結束
  或與該段分離,否則不會真正刪除這個段。不管此段是否還在使用,該
  此操作只能是有效用戶ID等於shm_perm.cuid 或 shm_perm.uid 或超級用戶。


  
連接到共享存儲段的地址空間去:shmat函數
#include<sys/shm.h>
void  *shmat(int shmid,const void *addr,int flag);
成功--指向共享存儲段的指針,出錯-- -1
調用成功後,shmid_ds結構的shm_nattch計數器加1


參數:
addr -- 0,由內核選擇第一個可用的地址
flag -- SHM_RDONLY,以只讀的方式連接此段
否則,以讀寫的方式連接此段
  
  
進程分離共享存儲段:shmdt函數
#include<sys/shm.h>
int shmdt(const void *addr);
成功--0,出錯-- -1 
調用成功後,shmid_ds結構的shm_nattch計數器減1



匿名存儲映射

使用mmap函數實現,調用mmap函數時指定MAP_ANON,文件描述符指定爲 -1.

area = mmap(0,SIZE,PROT_READ|PROT_WRITE,MAP_ANON|MAP_SHARED,-1,0);


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章