一、概念

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

二、实现

分为两个步骤:

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<sys/stat.h>
#include<sys/ipc.h>
#include<sys/shm.h>
#include<memory.h>
#include<fcntl.h>
#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]的值。

Linux 共享内存相关推荐

  1. linux的共享内存,linux共享内存实际在哪里?

    我只想知道共享内存驻留在Linux系统中的位置?它在物理内存还是虚拟内存中?linux共享内存实际在哪里? 我知道有关进程的虚拟内存发送信箱,他们从不同的工艺处理和流程没有看到对方的记忆,但我们可以利 ...

  2. Linux共享内存(二)

    Linux共享内存编程实例 原文链接:http://blog.csdn.net/pcliuguangtao/article/details/6526119 /*共享内存允许两个或多个进程进程共享同一块 ...

  3. c++ 共享内存_关于Linux共享内存的实验 [二] - 原因

    关于Linux共享内存的实验 [一] 上文采用的"删文件"和"杀进程"的方法主要是为了快速演示实验现象,但这种做法不利于通过调试手段进一步探究其内在的逻辑.为此 ...

  4. 【Linux共享内存】

    Linux共享内存 一.基本概念 二.常用函数 1. shm_open 2. mmap 3. munmap 4. shm_unlink 5. ftruncate 三.使用示例 四.share内存不足解 ...

  5. linux 共享内存操作(shm_open、mmap、编译链接库:-lz -lrt -lm -lc都是什么库)

    文章目录 linux 共享内存操作(shm_open) 一.背景 二.函数使用说明 shm_open ftruncate(改变文件大小) mmap共享内存 三.示例代码 创建内存共享文件并写入数据 打 ...

  6. linux 共享内存 查看和删除

    在使用共享内存的程序异常退出时,由于没有释放掉共享内存,在调试时会出现错误.您可以使用shell命令来查看与释放已经分配的共享内存,下面将详细说明如何进行查看和释放分配的共享内存的方法. 预备知识 L ...

  7. Linux共享内存编程实例

    /*共享内存允许两个或多个进程进程共享同一块内存(这块内存会映射到各个进程自己独立的地址空间)从而使得这些进程可以相互通信.在GNU/Linux中所有的进程都有唯一的虚拟地址空间,而共享内存应用编程接 ...

  8. LINUX共享内存使用常见陷阱与分析(转)

    所谓共享内存就是使得多个进程可以访问同一块内存空间,是最快的可用IPC形式.是针对其他通信机制运行效率较低而设计的.往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥.其他进程能把同一段共 ...

  9. linux 共享内存_盘点那些linux 后台开发类常见问题及知识点

    一.linux和os: netstat :显示网络状态 tcpdump:主要是截获通过本机网络接口的数据,用以分析.能够截获当前所有通过本机网卡的数据包.它拥有灵活的过滤机制,可以确保得到想要的数据. ...

  10. linux 共享内存_什么是物理/虚拟/共享内存——Linux内存管理小结一

    物理内存和虚拟内存到底有什么区别? 提到内存,我们会想到经常接触的三个词:虚拟内存.物理内存.共享内存.它们分别对应top输出中的VIRT.RES.SHR三列. 1. 物理内存 系统的物理内存被划分为 ...

最新文章

  1. 安防行业成巨头必争之地 一文梳理安防AI芯片产品与主要企业
  2. BZOJ2120 数颜色 【带修改莫队】
  3. 知识点:Mysql 索引原理完全手册(1)
  4. 剑指offer之找到链表里面包含环的入口节点
  5. 一步搞定你疑惑的数据结构与算法系列,原理+实战讲解
  6. shell中用grep查找并且不输出_grep awk 搜索日志常用命令
  7. linux目录 31:1,Linux常用基础命令
  8. Linux之shell编程基础
  9. 微信硬件平台对接--蓝牙
  10. Fedora 10 下编译安装 Libfetion 玩飞信
  11. 在微型计算机所说的80586,2017年职称计算机考试题库及答案
  12. 使用gitLab clone代码报错:error: RPC failed; curl 56 OpenSSL SSL_read: Connection was reset
  13. python画圣诞帽_用Python给头像戴圣诞帽
  14. Matlab学习笔记9.3:Matlab之神经网络模型
  15. 如何利用码文书把海报图片中的二维码替换成自己的二维码
  16. 人生感悟:欲望适度则为利,欲望过度则为害,高级java开发工程师简历
  17. 国仁网络资讯:视频号怎么剪辑制作视频;都有哪些剪辑软件好用。
  18. cad,3dmax,vray,photoshop
  19. excel根据数据画饼状图等
  20. 怎么删除桌面上多余的ie浏览器图标?

热门文章

  1. 基于彩色直方图自适应检测电影镜头切换
  2. 用sort对vector排序(转载)
  3. 蛇形走线用在哪里,一文告诉你
  4. 计算机专业术语大全,计算机专业名词总汇,计算机专业名词总汇
  5. 游戏开发者放心!Cocos引擎未感染XcodeGhost
  6. 软考-嵌入式系统设计师:[知识产权与标准化:笔记(七)]
  7. 互联网日报 | 5月2日 星期日 | 五一档总票房破5亿;中国联通在香港正式推出5G服务;欧盟首次对苹果发起反垄断诉讼
  8. Mysql数据库备份——数据库备份和表备份
  9. php日志写什么内容,Monolog-PHP日志类库介绍
  10. 前端培训教程JavaScript