06linux进程线程编程part16间通信六.pptxVIP

  • 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

文档评论(0)

1亿VIP精品文档

相关文档