posix.1提供了兩種在無親緣關係的程序間共享記憶體的方式
(1)記憶體對映檔案:由open函式開啟
乙個檔案
,由mmap函式把得到的描述符對映到當前程序位址空間中。
(2)共享記憶體區物件:由shm_open開啟乙個posix.1 ipc名字(通常是檔案系統中的乙個路徑名),所返回的描述符由mmap函式對映到當前程序位址空間。
posix的訊息佇列和訊號量都是一次呼叫直接返回,mq_open返回mqd_t值,sem_open返回sem_t值的指標,而posix的共享記憶體卻需要先shm_open(或者open)然後再mmap,這是因為posix在發明自己的共享記憶體形式時,已經存在mmap...
/*注:可以呼叫ftruncate來修改共享記憶體區的大小shm_open, shm_unlink - create/open or unlink posix shared memory objects
*/#include
#include
/*for mode constants
*/#include
/*for o_* constants
*/int shm_open(const
char *name, int
oflag, mode_t mode);
int shm_unlink(const
char *name);
/*mmap, munmap - map or unmap files or devices into memory
*/#include
void *mmap(void *addr, size_t length, int prot, int
flags,
intfd, off_t offset);
int munmap(void *addr, size_t length);
/*truncate, ftruncate - truncate a file to a specified length
*/#include
#include
int truncate(const
char *path, off_t length);
int ftruncate(int
fd, off_t length);
link with -lrt.
/*注:shmctl的cmd可以取值如下:shmget - allocates a system v shared memory segment
*/#include
#include
int shmget(key_t key, size_t size, int
shm***);
/*shmat, shmdt - system v shared memory operations
*/#include
#include
void *shmat(int shmid, const
void *shmaddr, int
shm***);
int shmdt(const
void *shmaddr);
/*shmctl - system v shared memory control
*/#include
#include
int shmctl(int shmid, int cmd, struct shmid_ds *buf);
struct
shmid_ds ;
struct
ipc_perm ;
ipc_rmid: 刪除指定共享記憶體區
ipc_set: 支援設定指定共享記憶體區的 shmid_ds結構體中的 shm_prem.uid, shm_prem.gid 和 shm_prem.mode
ipc_stat: 返回指定共享記憶體區的shmid_ds 結構
system v 共享記憶體區的限制
posix 共享記憶體和system v共享記憶體的區別
posix共享記憶體區物件的大小可在任何時刻通過呼叫ftruncate修改,而system v共享記憶體的大小是在呼叫shmget建立時固定下來的。
linux ipc機制 共享記憶體
17.shmat 功能 聯接共享記憶體的操作.語法 include include include void shmat shmid,shmaddr,shm int shmid void shmaddr int shmid 說明 將由shmid指示的共享記憶體聯接到呼叫程序的資料段中.被聯接的段放在...
Linux IPC之共享記憶體
程序都有自己的虛擬位址空間 每個程序的虛擬位址空間都不一樣 自己只能操作自己的位址空間 虛擬位址空間 這時如何實現程序間的資料交換,這裡核心給我們提供了介面,讓多個程序共同操作同塊特殊的記憶體區域,這就實現了資料交換 共享記憶體區域是被多個程序共享的一部分物理記憶體。如果多個程序都把該記憶體區域對映...
Linux共享記憶體及共享記憶體API
共享記憶體區是最快的ipc 程序間通訊 形式。用共享記憶體從伺服器拷貝檔案資料到客戶端 共享記憶體基本api include include 1.int shmget key t key,size t size,int shm 功能 用來建立共享記憶體 key 是這個共享記憶體段的名字 size 共...