千家信息网

Linux中怎么实现共享内存

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,Linux中怎么实现共享内存,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、概念共享内存是被多个进程共享的一部分物理内
千家信息网最后更新 2026年10月31日Linux中怎么实现共享内存

Linux中怎么实现共享内存,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

一、概念

共享内存是被多个进程共享的一部分物理内存,是进程间共享数据的最快的一种方法。

二、实现

分为两个步骤:
1、创建共享内存。
2、映射共享内存。
1、创建

代码如下:


int shmget(key_t key, int size, int shmflg)


当key的取值为 IPC_PRIVATE 时,将创建一块新的共享内存。shmflg至少设为S_IRUSR|S_IWUSR否则会出现读写错误。成功返回内存标示符,失败返回-1。
2、映射

代码如下:


int shmat(int shmid, char *shmaddr, int flag)


shmaddr为共享内存的起始地址。flag对内存的操作模式。通常命令可写为:shmat(shmid,NULL,0);

成功返回共享内存的起始地址,失败返回-1。

三、举例

代码如下:


#include
#include
#include
#include
#include
#define PERM S_IRUSR|S_IWUSR

int main(int argc ,char *argv[]){
int shmid;
pid_t pid;
if(argc!=2){
printf("Usage: shmA [string]\n");
return -1;
}
if((shmid=shmget(IPC_PRIVATE,1024,PERM))<0){
printf("shared memory create error!\n");
_exit(1);
}
char *p;
pid=fork();
if(pid ==0){
sleep(1);
p=shmat(shmid,NULL,0);
memset(p,'\0',1024);
strcpy(p,argv[1]);
printf("already written!!! It's %s \n",p);
}
else{
wait(NULL);
p = shmat(shmid,NULL,0);
printf("read from memory %s \n",p);
}
return 0;
}

子进程写入argv[1],父进程输出argv[1]的值。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

内存 进程 代码 成功 地址 帮助 起始 最快 清楚 两个 内容 命令 多个 对内 对此 数据 文章 新手 方法 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 深圳市人人互联网科技有限公司 云信互联网科技有限公司 朗新科技与工业互联网 关于新基建和互联网科技 奇酷互联网络科技 友谊互联网络科技 卫星互联网科技股票 现代科技和互联网有关系吗 彤创互联网科技有限公司 乌苏新华互联网科技做什么的 乌鲁木齐新华智原互联网科技学校 科技赋能视角下互联网保险发展 烟台灵鸽互联网科技有限公司 产业互联网科技服务公司 互联网与数字科技关系 中国科技和美国互联网 科技信息时代互联网发展 第三届互联网大会安防黑科技 陕西彩京云互联网科技有限公司 喔噻互联网科技有限公司 互联网科技公司简介 山东吉时兔互联网科技有限公司 青岛科技大学互联网大赛研究生 民营互联网公司国防科技 北京市互联网新科技 万物互联网智能科技 互联网科技新闻 张家口科技产业互联网平台 网互联网络科技
0