LINUX学习笔记14——进程间通信3共享内存
2813 点击·0 回帖
![]() | ![]() | |
![]() | a) 意义:多个进程共享一部分物理内存。访问快,方便 b) 先创建共享内存:int shmget(key_t key, int size, int shmflg) 1. Key:标志共享内存的键值;0/IPC_PRIVATE a) Key=0:本不创建,但若shmflg仍为IPC_PRIVATE则仍创建 2. Size:大小 3. Shmflg:标志 一般S_IRUSR|S_IWUSR 4. 返回值:成功返回共享内存标志符;失败返回-1; 5. #include<sys/ipc.h>,#include<sys/shm.h>,#include<sys/types.h>,#include<sys/stat.h> c) 再映射共享内存: 1. Int shmat(int shmid, char *shmaddr, int flag) a) Shmid:shmget函数返回的共享存储标识符 b) Shmaddr:是用来保存映射地址,若是0:表述系统自动找地址,通过返回值来得到 c) Flag:决定以什么方式来确定映射的地址(通常是0) d) 返回值:shmaddr=0时,成功返回共享内存映射到进程中的地址;失败返回-1 2. 共享内存映射到不同进程,地址不同 d) 清除内容:得到地址后需要先把这个内存区重置数据 1. memset(p_addr,’\0’,1024):1024个字节全部重置为 a) #include<string.h> e) 拷贝内容:strncpy(p_addr, argv[1],1024) f) 解除映射:int shmdt(char *shmaddr) | |
![]() | ![]() |