千家信息网

Posix共享内存

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Posix共享内存涉及以下两个步骤:1、指定一个名字参数调用shm_open,以创建以一个新的共享内存区对象或打开一个已存在的共享内存区对象。2、调用mmap把这个共享内存区映射到调用进程的地址空间。
千家信息网最后更新 2026年10月31日Posix共享内存

Posix共享内存涉及以下两个步骤:

1、指定一个名字参数调用shm_open,以创建以一个新的共享内存区对象或打开一个已存在的共享内存区对象。

2、调用mmap把这个共享内存区映射到调用进程的地址空间。

头文件:

#include

#include

#include

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

int shm_unlink(const char *name);

Link with -lrt(要注意连接这个库)

oflag参数是O_CRTEA|O_RDWR等标志;

mode参数指定权限位如果没有指定O_CREAT标志,那么该参数可以指定为0。(如果是创建的话权限要给够,平常是0644的权限,否则别的进程可能没有权限)。

一般创建的文件是自动放在/dev/shm/的目录下的。

新创建的文件大小一般为0,所以mmap函数调用文件标识符的时候会出错,这时候要用ftruncate()函数扩大文件

#include

int ftruncate(int fd,off_t length); 成功返回0,出错返回-1

对于一个普通文件:如果该文件的大小大于length参数,额外的数据就会被丢掉。

对于一个共享内存区对象:把该对象的大小设置成length字节。

当打开一个已存在的共享内存对象时,我们可以调用fstat来获取有关该对象的信息。

#include

#include

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

stat结构有12个或以上的成员, 但当fd指代一个共享内存区对象时,只有四个成员含有信息。

struct stat{

mode_t st_mode;

uid_t st_uid;

gid_t st_gid;

off_t st_size;

};

调用时不用定义这个结构体,直接实例化就行了,如:struct stat sta;

下面是两个例子,一个是向共享内存里写,一个读取;

read:

#include#include#include#include#include#includeint main(int argc,char* argv[]){    int fd = shm_open(argv[1],O_RDONLY,0);    void* buf = NULL;    if((buf = mmap(NULL,BUFSIZ,PROT_READ,MAP_SHARED,fd,0)) ==MAP_FAILED ){        perror("mmap error\n");        return 1;    }    sleep(1);    while(1){        printf("read:%s\n",buf);        sleep(3);    }    munmap(buf,BUFSIZ);    close(fd);}

执行:./read mmap.txt


write:

#include#include#include#include#include#includeint main(int argc,char* argv[]){    int fd = shm_open(argv[1],O_CREAT|O_RDWR,0644);    if(fd == -1){        perror("shm_open error\n");        return 1;    }    ftruncate(fd,100);    void* buf = NULL;    if((buf = mmap(NULL,BUFSIZ,PROT_WRITE,MAP_SHARED,fd,0))== MAP_FAILED){        perror("mmap error\n");        return 1;    }    int i;    for(i=2;i

执行:

./write mmap.txt aaa bbb ccc

内存 对象 文件 参数 权限 大小 两个 信息 函数 成员 标志 结构 进程 平常 普通 成功 不用 例子 只有 名字 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 哈尔滨大商圈互联网科技有限公司 疫情对互联网科技公司影响 互联网下的科技发展 北京互联网科技公司 高科技与互联网 互联网与未来科技 苏州互联网科技贷款公司 互联网科技股午盘股票涨跌 互联网科技中介 岳阳华臻互联网科技有限公司 明优互联网科技有限公司 银行科技岗属于互联网吗 互联网科技股为什么大涨 互联网与数字科技关系 互联网科技职业技能培训学校 玉溪新华互联网科技怎么选 深圳互联网科技园地址 广东猫王互联网科技有限公司电话 中国主要互联网科技公司 齐家互联网科技有限公司 互联网科技英文翻译 银川新华互联网科技学校地址 科技互联网的估值 华服互联网科技官网 宁夏科技产业互联网案例 智腾互联网科技有限公司 企晟互联网信息科技有限公司 用友工业互联网科技发展 国产互联网科技公司
0