先描述在组织
首先观察一下他们的结构体:共享内存(shmid_ds)、消息队列(msqid_ds)、信号量(semid_ds) 他们都有一个相同的成员结构体。ipc_perm 这个ipc_perm
结构体用于存储权限和相关信息,如所有者、用户组、权限模式等。
ipc_perm
struct ipc_perm
{
key_t __key;/*Key*/
uid_t uid; /* Effective UID of owner */
gid_t gid;/* Effective GID of owner */
uid_t cuid;/* Effective UID of creator*/
gid_t cgid; /*Effective GID of creator*/
unsigned short mode; /* Permissions + SHM_DEST and SHM_LOCKED flags */
unsigned short __seq; /* Sequence number */
};
这里的关键字段包括:
-
__key
:这是在调用shmget、msgget、semget
时提供的键值,用于标识共享内存对象。 -
uid
、gid
、cuid
、cgid
:这些字段分别表示创建者和所有者的用户ID和组ID。 -
mode
:这是IPC对象的权限,包括读、写、执行等权限,以及共享内存的标记(如SHM_DEST
和SHM_LOCKED
)。 -
__seq
:这是一个序列号,用于跟踪IPC对象的唯一性。
这个结构体通常用于描述共享内存段、信号量集等IPC对象的相关信息。在Unix-like系统中,这些对象通常通过系统调用进行创建和管理
shmid_ds共享内存
struct shmid_ds {
uid_t shm_perm.uid; // 所有者ID
gid_t shm_perm.gid; // 组ID
mode_t shm_perm.mode; // 访问权限
int shm_perm.__key; // IPC键值
struct ipc_pid shm_perm.cuid;
struct ipc_pid shm_perm.uid;
unsigned short shm_perm.mode;
unsigned short shm_perm._seq;
time_t shm_ctime; //创建时间
time_t shm_atime; //最后连接时间
time_t shm_dtime; //最后断开连接时间
size_t shm_segsz; //内存段大小
pid_t shm_cpid; //创建进程号
pid_t shm_lpid; //最后连接进程号
short shm_nattch; //当前挂接进程数
... //