Thanks to: https://blog.csdn.net/libaineu2004/article/details/76919711

今天编写的程序,要使用一个共享内存,共享内存是由别的进程创建并初始化,我这边负责将内存attach 到我的进程空间里,在调用函数 shmget 的时候报错了

    今天编写的程序,要使用一个共享内存,共享内存是由别的进程创建并初始化,我这边负责将内存attach 到我的进程空间里,在调用函数 shmget 的时候报错了int shmid = shmget((key_t)key,size,0);if(shmid == -1 ){perror("shmget error:");return NULL;}else{return shmat(shmid,0,0);}

errno = 22 Invalid argument

然后就是查找问题,花了大半天都没找到问题,最后重启机器好了,经过我的思考与查找,我认为有2个原因导致的。

  1. 程序编译的时候,打开的共享内存必须先关闭,也就是说在编译带有共享内存程序的时候,必须先在终端使用命令ipcrm 掉使用的share memery,因为创建共享内存的程序已经在运行,我的程序必须要attch这块共享内存,因此编译出来,可能导致错误。
  2. 共享内存的结构被修改,也就是说创建的共享内存结构和你将要attch 之后的共享内存结构不一致导致的,创建共享内存程序的大小,比我的程序要使用的共享内存要小,虽然shmid都是一样,但是大小比创建的大,这肯定是有问题,因为我的程序结构比创建程序使用的结构要多2个结构体,因此这个会导致程序无效的参数。

写这两点,为铭记我查找半天代码的代价,传到博客,供大家共享,以避免重走我的老路,为无谓的错误浪费大量时间。

具体的用法总结如下:

1、显示所有的IPC设施

ipcs -a

2、显示所有的消息队列Message Queue

ipcs -q

3、显示所有的信号量

ipcs -s

4、显示所有的共享内存

ipcs -m

5、显示IPC设施的详细信息

ipcs -q -i id

id 对应shmid、semid、msgid等。-q对应设施的类型(队列),查看信号量详细情况使用-s,查看共享内存使用-m。

6、显示IPC设施的限制大小

ipcs -m -l

-m对应设施类型,可选参数包括-q、-m、-s。

7、显示IPC设施的权限关系

ipcs -c

ipcs -m -c

ipcs -q -c

ipcs -s -c

8、显示最近访问过IPC设施的进程ID。

ipcs -p

ipcs -m -p

ipcs -q -p

9、显示IPC设施的最后操作时间

ipcs -t

ipcs -q -t

ipcs -m -t

ipcs -s -t

10、显示IPC设施的当前状态

ipcs -u

Linux上的ipcs命令,不支持UNIX上的-b、-o指令,同样UNIX中不支持-l、-u指令,所以在编写跨平台的脚本时,需要注意这个问题。

[root@localhost ~]# ipcs -a------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    ------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 196608     root       600        524288     2          dest
0x00000000 229377     root       600        4194304    2          dest
0x00000000 327682     root       600        4194304    2          dest
0x6f000af7 622595     root       666        204000     0
0x00000000 458756     root       600        393216     2          dest
0x51006ce5 491525     root       600        1024       1
0x00000000 524294     root       600        5674396    2          dest
0x00000000 557063     root       600        4194304    2          dest         ------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x510014fb 65536      root       600        1
0x0b000af7 98305      root       666        1         [root@localhost ~]# ipcrm -m 622595

————————————————
版权声明:本文为CSDN博主「libaineu2004」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/libaineu2004/article/details/76919711

shmget创建共享内存errno - ipcs - From相关推荐

  1. linux共享内存原IPCS,linux调试工具ipcs的深入分析

    用ipcs调试共享内存 测试源程序如下: #include #include #include #include #include #include #include void error_out(c ...

  2. linux如何创建共享内存,linux实现共享内存同步的四种方法

    https://blog.csdn.net/sunxiaopengsun/article/details/79869115 本文主要对实现共享内存同步的四种方法进行了介绍. 共享内存是一种最为高效的进 ...

  3. Linux下的共享内存 ---创建共享内存

    说明: 1.创建共享内存使用的函数:int shmget(key_t key, size_t size, int shm-flg); 2.参数key既可以是IPC_PRIVATE(0),也可是是fto ...

  4. 如何查询oracle的共享内存,[20190104]ipcs查看共享内存段.txt

    [20190104]ipcs查看共享内存段.txt --//数据库启动异常,有时候会留下一些共享内存段没有清理,需要使用ipcrm清理. --//由于服务器上跑2个实例,必须选择正确的共享内存段,否则 ...

  5. shmget() -- 建立共享内存[zz] - [LINUX]

    版本声明:此文章来源于http://leezen.blogbus.com/logs/19564086.html,如果还想转载请看他的版本声明 版权声明:转载时请以超链接形式标明文章原始出处和作者信息及 ...

  6. c语言中shmget相关函数,共享内存函数(shmget、shmat、shmdt、shmctl)及其范例 - guoping16的专栏 - 博客频道 - CSDN...

    2014年4月2日共享内存函数(shmget.shmat.shmdt.shmctl)及其范例 - guoping16的专栏 - 博客频道 - http://doc.xuehai.net 登录 | 注册 ...

  7. 在Oracle 11g中用看Oracle的共享内存段---------IPCS

    很早之前,在一次讲课了,用了命令ipcs,发现oracle的共享内段好小,如下: oracle@mydb ~]$ ipcs -a------ Shared Memory Segments ------ ...

  8. linux共享内存原IPCS,共享内存相关(ipcs/ipcrm)

    在Linux进程通信中,共享内存的应用是比较普遍,把自己学习过的资料作一个小结吧! 共享内存是系统出于多个进程之间通讯的考虑,而预留的的一块内存区.在/proc/sys/kernel/目录下,记录着共 ...

  9. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

    Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...

最新文章

  1. Linux 环境变量配置
  2. etal斜体吗 参考文献_论文格式与论文参考文献格式
  3. 如何进行网络推广教大家在网站排名变差该如何进行查找问题所在?
  4. 通过递归算法完成树的级联勾选的一般思路
  5. 基于Boost::beast模块的无栈协程http服务器
  6. “@react-navigation/native“).createNavigatorFactory) is not a function.
  7. CSS3的transition和transform
  8. Laravel 5.8 正式发布(文档翻译已启动)
  9. websoc是什么可以卸载吗_购房诚意金是什么意思?可以退吗?
  10. Linux下挂载NTFS
  11. shp数据制作3DTiles白膜
  12. 软考中级-软件设计师-查缺补漏
  13. 【图解】ERP系统如何操作?具体步骤是什么?
  14. JS前端实现是否繁体判断,简繁体转换,简体和QQ个性繁体转换
  15. instagram 和不联网
  16. 【论文翻译】Self-Guided and Cross-Guided Learning for Few-Shot Segmentation
  17. Spring Cloud 基本理论概述
  18. 贷还是不贷:如何用Python和机器学习帮你决策?(zz)
  19. 从力的角度重新认识迭代次数
  20. 学习笔记:12864液晶模块的…

热门文章

  1. 盘点收房时常见六大问题
  2. 股票交易软件接口的传输协议是什么?
  3. 香港服务器使用CDN加速对网站有什么好处?
  4. 飞桨与海光人工智能加速卡DCU系列完成互证,助力国产AI加速 卡人工智能应用创新
  5. xshell远程连接linux失败_问题1-xshell远程连接不上linux主机
  6. RecyclerView实现Item点击事件
  7. java properties中文_Java读写.properties文件解决中文乱码问题
  8. goland设置import规范
  9. NextInt()和NextLine()
  10. java+postgis实现根据两点生成模拟轨迹gps数据