- 1
- 0
- 约1.32千字
- 约 14页
- 2021-11-29 发布于北京
- 举报
进程间通信(六);共享内存特点(了解)
;IPC 对象包含: 共享内存、消息队列和信号灯集
每个IPC对象有唯一的ID
IPC对象创建后一直存在,直到被显式地删除
每个IPC对象有一个关联的KEY
ipcs / ipcrm
;System V IPC - key; #include sys/types.h
#include sys/ipc.h
key_t ftok(const char *path, int proj_id);
成功时返回合法的key值,失败时返回EOF
path 存在且可访问的文件的路径
proj_id 用于生成key的数字,不能为0
;#include stdio.h
#include stdlib.h
#include sys/types.h
#include sys/ipc.h
#include unistd.h
int main(int argc, char *argv[]) {
key_t key;
if ((key = ftok(“.”, ‘a’)) == -1) {
perror(“key”);
exit(-1);
}
……;共享内存是一种最为高效的进程间通信方式,进程可以直接读写内存,而不需要任何数据的拷贝
共享内存在内核空间创建,可被进程映射到用户空间访问,使用灵活
由于多个进程可同时访问共享内存,因此需要同步和互斥机制配合使用;创建/打开共享内存
映射共享内存,即把指定的共享内存映射到进程的地址空间用于访问
读写共享内存
撤销共享内存映射
删除共享内存对象; #include sys/ipc.h
#include sys/shm.h
int shmget(key_t key, int size, int shmflg);
成功时返回共享内存的id,失败时返回EOF
key 和共享内存关联的key,IPC_PRIVATE 或 ftok生成
shmflg 共享内存标志位 IPC_CREAT|0666
;要求:创建一个私有的共享内存,大小为512字节,权限
为0666
int shmid;
if ((shmid = shmget(IPC_PRIVATE, 512, 0666)) 0) {
perror(“shmget”);
exit(-1);
};要求:创建/打开一个和key关联的共享内存,大小为1024
字节,权限为0666
key_t key;
int shmid;
if ((key = ftok(“.”, ‘m’)) == -1) {
perror(“ftok”);
exit(-1);
}
if ((shmid = shmget(key, 1024, IPC_CREAT|0666)) 0) {
perror(“shmget”);
exit(-1);
};
ftok
共享内存特点
shmget
您可能关注的文档
- 资料课件案例教案appendix h construction.pdf
- 12国外大学研究所收集sanger chapter.pdf
- 文本案例evb t335linux开发指南.pdf
- ds124调研数据统计报告.pdf
- 内容文稿成果信号源59684313cha esg.pdf
- 老师写作x2笔记.pdf
- c346技术价格标书分析dfm5rd main carrier rhs presentation v.pptx
- 2026年中国生态养猪场市场数据调查、监测研究报告.docx
- 2026年中国生猪养殖屠宰、肉制品加工市场数据调查、监测研究报告.docx
- 2026年中国生猪养殖屠宰深加工市场数据调查、监测研究报告.docx
原创力文档

文档评论(0)