生产消费者
# Linux
# shmget()
用于创建共享内存
int shmget(key_t key,size_t size,int shmflg)
1
key_t key
第一个参数用于共享内存命名,不同进程通过key
进行共享内存识别。函数不止用于创建共享内存,这里返回的描述符有可能是已经创建好的命名为key
共享内存的描述符size_t size
指定需要的共享内存空间大小int shmflg
限权标志 , 如果想要在key
表示的共享内存不存在时创建的话可以使用IPC_CREAT
进行指示,如果还要指定改共享内存的权限的话(和liunx下文件权限意义相同),可以与权限做或运算。如果创建新的共享内存且指定共享内存的权限为 0644 (表示该进程的共享内存对于该用户创建的其他内存而言具有rw限权,同用户组以及其他用户权限只有r限权),则可以指定 为IPC_CREAT | 0644
- 返回成功为 key 相关的共享空间描述符
- 失败 -1
# shmat()
第一次创建完共享内存时,它还不能被任何进程访问,shmat
函数作用就是用来启动对共享内存的访问,并把共享内存连接到当前的地址空间
void *shmat(int shm_id,const void *shm_addr,int shmfg)
1
调用成功返回共享内存首地址,调用失败返回-1
shm_id
shm_addr
shmfg
# shmdt()
该函数用于将内存从当前进程中分离
需要注意,将共享内存分离并不是删除它,只是使该共享内存对当前进程不再可用
int shmdt(const void* shamddr)
1
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48