Posix共享內存區

Posix提供了兩種在無親緣關係進程間共享內存區的方法:

(1)內存映射文件:先有open函數打開,然後調用mmap函數把得到的描述符映射到當前進程地址空間中的一個文件(上一篇筆記所用到的就是)。

(2)共享內存區對象:先有shm_open打開一個Posix IPC名字(也可以是文件系統中的一個路徑名),然後調用mmap將返回的描述符映射到當前進程的地址空間。

者兩種方法多需要調用mmap,差別在於作爲mmap的參數之一的描述符的獲取手段。

Posix共享內存區涉及以下兩個步驟要求:

(1)指定一個名字參數調用shm_open,以創建一個新的共享內存區對象或打開一個已經存在的共享內存區對象。

(2)調用mmap把這個共享內存區映射到調用進程的地址空間。

注意:mmap用於把一個內存區對象映射到調用進程地址空間的是該對象的一個已經打開描述符。

1、shm_open

#include ​

int shm_open(const char *name, int oflag, mode_t mode);

​1)name    共享內存區的名字

2)oflag    標誌位

3)mode    權限位,它指定O_CREAT標誌的前提下使用。

​2、shm_unlink

int shm_unlink(const char *name); ​

刪除一個共享對象的名字

3、ftruncate​

int ftruncate(int fd, off_t length);

將參數fd指定的文件大小改爲參數length指定的大小

普通文件或共享內存區對象的大小都可以通過調用ftruncate修改

​4、fstat

int fstat(int fd, struct stat *buf); 

查看狀態

當打開一個已存在的共享內存區對象時,我們可調用fstat來獲取有關該對象的信息

對於普通文件stat結構可以獲得12個以上的成員信息,然而當fd指代一個共享內存區對象時,只有四個成員含有信息。

struct stat

{

mode_t st_mode;

uid_t st_uid;

gid_t st_gid;

off_t st_size;

};

發佈了43 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章