深入分析一下共享内存、消息队列和信号量

本文详细介绍了Unix-like系统中IPC结构体(如shmid_ds、msqid_ds和semid_ds)的共同特点,特别是它们都包含一个名为IPC_perm的结构体,用于存储权限、所有者、用户组等信息,以及关键字段如__key、uid、gid、mode和序列号。文章还探讨了这些结构体在内核中的组织方式和管理机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先描述在组织

首先观察一下他们的结构体:共享内存(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时提供的键值,用于标识共享内存对象。

  • uidgidcuidcgid:这些字段分别表示创建者和所有者的用户ID和组ID。

  • mode:这是IPC对象的权限,包括读、写、执行等权限,以及共享内存的标记(如SHM_DESTSHM_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;      //当前挂接进程数
    ...  //
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值