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;
};
轉載于:https://www.cnblogs.com/luiz/p/6828811.html
總結
以上是生活随笔為你收集整理的Posix共享内存区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hdu 2489 Minimal Rat
- 下一篇: Linux查看进程并重启服务命令