1、概述
System V共享内存区在概念上类似于Posix共享内存区。代之以调用shmopen后调用mmap的是,先调用shmget,再调用shmat。
对于每个共享内存区,内核维护如下的信息结构,它定义在<sys/shm.h>头文件中:
struct shmid_ds
{
struct ipc_perm shm_perm; /* operation permission struct */
size_t shm_segsz; /* segment size */
pid_t shm_lpid; /* pid of last operation */
pid_t shm_cpid; /* creator pid */
shmatt_t shm_nattch; /* current attached */
shmat_t shm_cnattch; /* in-core # attached */
time_t shm_atime; /* last attach time */
time_t shm_dtime; /* last detach time */
time_t shm_ctime; /* last change time of this structure */
};
2、shmget 函数
shmget函数创建一个新的共享内存区,或者访问一个已存在的共享内存区。
#include <sys/shm.h>
int shmget(key_t key, size_t size, int oflag);
// 返回:若成功则为共享内存区对象,若出错则为-1
返回值是一个称为共享内存区标识符(shared memory identifier)的整数,其他三个shmxxX函数就用它来指代这个内存区。
key既可以是ftok的返回值,也可以是I