共享内存段被多个进程附加的时候,如果不是所有进程都已经调用shmdt,那么删除该共享内存段时,会出现一个临时的不完整的共享内存段(key值是0),无法彻底删除。只有当所有进程都调用shmdt,这个临时的不完整共享内存段才会消失。

//共享内存
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/ipc.h>
#include <sys/shm.h>typedef struct _student
{char name[64];int index;
}Student;int main()
{//创建内存中的共享内存区,大小是sizeof(Student),权限是0666int shmid= shmget(0x2234,sizeof(Student),0666|IPC_CREAT|IPC_EXCL);if(shmid==-1){if(errno==EEXIST){//该key值的共享内存已经存在shmid=shmget(0x2234,sizeof(Student),0666);}else{perror("shmget() err");return -1;}}//创建进程内的映射共享内存区void *buf=NULL;//shmat()第二个参数为NULL,表示由系统创建进程内的共享内存,第三个参数表示的是读写权限//返回值buf是系统在本进程内分配的内存块的首地址buf=shmat(shmid,NULL,0);//向本进程的共享内存写入数据strcpy(buf,"11112");printf("请输入操作!\n");char ch=getchar();if(ch=='1'){//将本进程中映射共享内存的内存块释放,本进程取消附加共享内存
        shmdt(buf);//删除共享内存段
        shmctl(shmid,IPC_RMID,NULL);}return 0;
}

转载于:https://www.cnblogs.com/zhanggaofeng/p/6224091.html

Linux 共享内存详解一相关推荐

  1. 【Boost C++ 库】共享内存详解

    文章目录 1 共享内存 1.1 创建共享内存 1.2 将共享内存映射到进程的地址空间 1.3 在共享内存中写入和读取 1.4 删除共享内存 1.5 使用特定于Windows的共享内存 传送门 ==&g ...

  2. Windows共享内存详解

    文章目录 前言 一.什么是共享内存? 二.使用方法 三.具体使用 四.注意事项 前言 一般来说,进程都处于不同的空间内,如果进程间想要通信,就需要用到其它方法,例如共享内存.管道.邮槽.本地回环网络. ...

  3. 内存详解-理解 JVM 如何使用 Windows 和 Linux 上的本机内存

    内存详解 理解 JVM 如何使用 Windows 和 Linux 上的本机内存 Java™ 堆耗尽并不是造成 java.lang.OutOfMemoryError 的惟一原因.如果本机内存 耗尽,则会 ...

  4. linux设置共享权限设置命令,Linux系列知识详解(三)--------- Linux链接命令和权限管理命令...

    Linux系列知识详解(三)--------- Linux链接命令和权限管理命令 一:链接命令ln 简介:什么是链接命令?链接命令分为软链接和硬链接.其中软链接产生的新文件是以路径的形式表示原文件,类 ...

  5. linux下挂载共享目录,linux mount挂载共享目录详解

    linux mount挂载共享目录详解 这里有新鲜出炉的 Linux 常用命令,程序狗速度看过来! Linux Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 ...

  6. linux命令ls查看内存,Linux ls 命令详解

    Linux ls命令详解 Linux中ls命令用于显示指定工作目录下之内容,其内容就是指定的工作目录所含之文件及子目录,该命令的用法为"ls [参数] [目录名]",其常用参数有& ...

  7. Linux /dev目录详解和Linux系统各个目录的作用

    Linux /dev目录详解和Linux系统各个目录的作用 标签: linuxtcpfunctionclassfirefoxtimer 2012-01-11 23:08 45517人阅读 评论(2) ...

  8. linux编译bzip2,linux bzip2 命令详解

    linux bzip2 命令详解 功能说明:.bz2文件的压缩程序. 语 法:bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- ...

  9. Linux常用命令详解文库

     Linux常用命令详解文库.txt精神失常的疯子不可怕,可怕的是精神正常的疯子!Linux常用命令详解 来源: LUPA开源社区 发布时间: 2007-05-27 05:34 版权申明 字体: ...

最新文章

  1. lsmod modinfo ....
  2. 网页上的图片怎么提取出来_如何在网站上提取图片素材
  3. gnu linux空间包括什么,不知道这十项Linux常识,就别说自己玩过Linux
  4. ASP.NET- 执行SQL超时的解决方案
  5. matlab控制图像的边界(margin),subplot的间距(gap)
  6. 如何用 Tensorflow 搭建神经网络-了解神经网络基本概念
  7. RocketMQ系列实战
  8. jquery gotop插件
  9. SQL2000无法安装,提示挂起
  10. 生动理解java接口
  11. 移动apn接入点哪个快_51物联卡:使用物联网卡时为什么总要让你设置APN?
  12. 中小企业如何做全网营销推广?常见的网络营销推广技巧和策略
  13. 【操作系统----Linux】Linux作为服务器系统安装过程
  14. linux 中的 ln 命令,Linux ln命令操作指南
  15. python是面向对象开发_Python之面向对象
  16. PS基础教程[7]如何为照片瘦身
  17. macOS Big Sur 11.0(20A5343i)原版镜像
  18. phpcms教程:phpcms v9 筛选功能的图文教程
  19. 格式工厂,帮你搞定各种格式转换!
  20. c语言编写整数划分程序,整数划分的问题

热门文章

  1. 【POJ - 3177】Redundant Paths(边双连通分量,去重边)
  2. 【CodeForces - 988C 】Equal Sums (思维,STLmap,STLset,tricks)
  3. C++手动开启O2优化(以及-O -O1 -O2 -O3优化的知识点)(竞赛可用)
  4. 【POJ-3259】 Wormholes(判负环,spfa算法)
  5. oracle排名怎么去除空值影响,Oracle排序中null值处理方法讲解
  6. linux内核 sin头文件,Linux内核中中断request_irq详解--中断共享问题解决
  7. Linux 软件包管理器的目的是什么,Linux软件包的管理--RPM包管理器
  8. mysql中nchar_浅谈SQL Server、MySQL中char,varchar,nchar,nvarchar区别
  9. (多线程)leetcode1195. 交替打印字符串 最简单解法一个变量搞定
  10. Harris的角点检测和特征匹配