← 返回首页
Linux高级程序设计(六十六)
发表时间:2021-12-20 20:14:40
attach/detach

1.共享内存映射

shmat函数将一个共享内存段映射到调用进程的数据段中。简单来理解,让进程和共享内存建立一种联系,让进程某个指针指向此共享内存。

#include <sys/types.h>
#include <sys/shm.h>

void *shmat(int shmid, const void *shmaddr, int shmflg);

参数:

返回值: - 成功:共享内存段映射地址( 相当于这个指针就指向此共享内存 ) - 失败:-1

shmat函数使用时第二和第三个参数通常指定为NULL和0,即系统自动指定共享内存地址并且共享内存可读可写。

2.解除共享内存映射

shmdt函数将共享内存和当前进程分离( 仅仅是断开联系并不删除共享内存,相当于让之前的指向此共享内存的指针,不再指向)。

#include <sys/types.h>
#include <sys/shm.h>

int shmdt(const void *shmaddr);

参数: - shmaddr:共享内存映射地址。

返回值: - 成功:0 - 失败:-1