system V 共享内存 shmget shmctl 用法解释
来源:互联网 发布:mac 美服lol下载教程 编辑:程序博客网 时间:2024/06/03 10:29
基本用法看man文档
1. shmget,shmflg指定IPC_EXCL位
A. 如果key对应的共享内存已经存在,则返回-1,并且置errno为EEXIST错误;此时需要重新shmget一下并且shmflg不置IPC_EXCL位
B. 否则如果key对应的共享内存不存在:
如果size大于已存在共享内存容量,则返回-1并置errno为EINVAL,此时需要删除旧共享内存并重新申请(申请时序先shmget 一下,参数size置1, 目的是获取旧共享内存的shmid,共shmctl删除使用)
如果size小于等于共享内存容量,分配成功(如果在这一步分配失败,则可通过error值确定原因)
2. shmctl。
shmctl删除共享内存时首先要获取共享内存id,方法见上。
测试:
1. a进程创建一块大小为8的共享内存,并进入死循环(目的是关联该共享内存,使下面的nattch不为0)
# ./a
# ipcs -m
----- Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x000214bc 1933313 root 666 8 1
2. c进程key与a进程相同,创建大小为1024共享内存,发现已存在共享内存(a进程创建)容量太小,则删除旧共享内存,并重新创建。
# ./c
# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 1933313 root 666 8 1 dest
0x000214bc 1966082 root 232 1024 0
可以看出a进程创建共享内存所用key值已经从0x000214bc 变成0x00000000,并且status变成dest状态,这是由于c进程的shmctl在删除旧共享内存时,内核发现该共享内存的nattch为1(也就是有进程关联在该共享内存上,此处为a进程,因为死循环),内核就会置key为IPC_PRIVATE并置status为dest,这就保证该共享内存成为唯一的,dest状态会保证在关联进程(此处为a进程)终止时,该共享内存会被内核删除回收,而c进程创建的共享内存的key值依然是0x000214bc 。
3. key值为IPC_PRIVATE
IPC_PRIVATE会保证创建唯一的共享内存,多个进程都可以用IPC_PRIVATE创建自己特有的共享内存。
测试如下图
# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 1933313 root 666 8 1 dest
0x000214bc 1966082 root 232 1024 0
0x00000000 1998851 root 232 1 0
0x00000000 2031620 root 232 1 0
0x00000000 2064389 root 232 1 0
- system V 共享内存 shmget shmctl 用法解释
- 57-System V 共享内存-shmctl
- 共享内存函数(shmget、shmat、shmdt、shmctl)
- Linux shmget/shmat/shmctl共享内存
- 共享内存 shmget()、shmat()、shmdt()、shmctl()
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- IPC--共享内存 Share Memory 实例(shmget shmat shmdt shmctl)
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 共享内存函数(shmget、shmat、shmdt、shmctl)及其范例
- 共享内存函数(shmget、shmat、shmdt、shmctl)
- linux 共享内存(shmget,shmat,shmdt,shmctl)解析
- 共享内存函数(shmget,shmat,shmdt,shmctl)及其范例
- CSS表单设计
- 组织2012北京敏捷之旅活动有感
- AppCan2.0跨平台移动应用开发经验分享
- flex学习文章收集
- MinGW + MSYS 配置 Windows 下的编译终端(包含中文的输入输出问题)
- system V 共享内存 shmget shmctl 用法解释
- bootchart 分析从内核启动后,到用户登录前的启动过程
- MFC和flash交互
- 第一回 开篇 D3D渲染流程简介
- 伤感QQ日志:全世界 我只想安静爱你
- Java访问修饰符
- C语言分割字符串strtok函数
- sharepoint2010部署wsp后缀的webpart
- 集群中各节点的防火墙问题