Provided by: manpages-zh_1.6.3.3-2_all bug

NAME

       ipc - System V 进程间通信机制

SYNOPSIS 总览

       # include <sys/types.h>
       # include <sys/ipc.h>
       # include <sys/msg.h>
       # include <sys/sem.h>
       # include <sys/shm.h>

DESCRIPTION

       本手册页涉及   System   V   进程间通信机制在   Linux   下的实现:   消息队列,   信号灯集合,
       以及共享内存段. 下面提到 资源 时, 就是指上面这些通信机制中的一种.

   资源访问权限
       对每个资源,  系统用一个共有的   struct   ipc_perm   结构来存放权限信息,   以确定一个   ipc
       操作是否可访问该资源. 在 <sys/ipc.h> 中定义了 ipc_perm, 其成员如下:

            ushort cuid;    /* 创建者 uid */
            ushort cgid;    /* 创建者 gid */
            ushort uid; /* 所有者 uid */
            ushort gid; /* 所有者 gid */
            ushort mode; /* 读/写权限 */

       结构   ipc_perm   的成员  mode  的低九位定义了对该资源的访问许  可,  以确定一个执行了  ipc
       系统调用的进程能否访问该资源. 其解 释如下:

            0400 用户可读.
            0200 用户可写.
            0040 组成员可读.
            0020 组成员可写.
            0004 其他用户可读.
            0002 其他用户可写.

       系统没有使用执行位 0100, 0010 和 0001. 另外, 这里的 "可写" 等 效于信号灯集合里的 "可更改".

       在 <sys/ipc.h> 系统头文件里还定义了如下符号常数:

       IPC_CREAT     如果 key 不存在就创建.

       IPC_EXCL      如果 key 已经存在则失败.

       IPC_NOWAIT    如果请求必须等待, 产生错误.

       IPC_PRIVATE   私有 key.

       IPC_RMID      删除资源.

       IPC_SET       设置资源选项.

       IPC_STAT      取得资源选项.

       请注意  IPC_PRIVATE   是一个   key_t   类型,   而别的符号常数都是标志域,它们的可以或(   OR
       )在一起形成 int 类型.

   消息队列
       消息队列由正整数  (它的  msqid) 唯一标识, 其结构体 struct msquid_ds<sys/msg.h> 中定义,
       包含如下成员:

            struct ipc_perm msg_perm;
            ushort msg_qnum;     /* 队列中消息数目 */
            ushort msg_qbytes;   /* 一条队列最大字节数 */
            ushort msg_lspid;    /* 上一次 msgsnd 调用的 pid  */
            ushort msg_lrpid;    /* 上一次 msgrcv 调用的 pid */
            time_t msg_stime;    /* 上一次 msgsnd 的时间 */
            time_t msg_rtime;    /* 上一次 msgrcv 的时间 */
            time_t msg_ctime;    /* 上一次修改时间 */

       msg_perm   ipc_perm 结构, 指明了对该消息队列的访问权限.

       msg_qnum   该队列当前的消息总数.

       msg_qbytes 该队列所允许的消息正文最大字节总数.

       msg_lspid  最后做 msgsnd 系统调用的进程的 ID.

       msg_lrpid  最后做 msgrcv 系统调用的进程的 ID.

       msg_stime  最近做 msgsnd 系统调用的时间.

       msg_rtime  最近做 msgrcv 系统调用的时间.

       msg_ctime  最后一次改变 msqid_ds 结构成员的时间.

   信号灯集合
       信号灯集合由正整数 (它的 semid) 唯一标识, 并有一个与之关联的结构体  struct  semid_ds  它在
       <sys/sem.h> 中定义, 包含如下成员:

            struct ipc_perm sem_perm;
            time_t sem_otime;    /* 上一次操作的时间 */
            time_t sem_ctime;    /* 上一次修改的时间 */
            ushort sem_nsems;    /* 集合中信号灯数目 */

       sem_perm   ipc_perm 结构, 指明对该信号灯集合的访问权限.

       sem_otime  最近做 semop 系统调用的时间.

       sem_ctime  最近做        semctl       系统调用的时间,       该调用修改了上面结构的一个成员
                  或者改变了属于该集合的一个信号灯.

       sem_nsems  该信号灯集合的信号灯数目.   集合中每个信号灯都可以用从   0sem_nsems-1
                  的一个非负整数来引用.

       一个信号灯就是一个 struct sem 结构, 包含如下成员:

            ushort semval;  /* 信号灯值 */
            short sempid;   /* 上一次操作的进程的 pid */
            ushort semncnt;      /* 等待增加 semval 值的进程数目 */
            ushort semzcnt;      /* 等待 semval = 0 的进程数目 */

       semval     该信号灯值,是一个非负整数.

       sempid     最后一个对该信号灯做操作的进程 ID.

       semncnt    等待增加 semval 的进程数.

       semznt     等待 semval 变成 0 的进程数.

   共享内存段
       共享内存段由正整数   (它的   shmid)  唯一标识,  有一个关联的结构类型  struct  shmid_ds<sys/shm.h> 中定义, 包含如下成员:

            struct ipc_perm shm_perm;
            int shm_segsz;  /* 段尺寸 */
            ushort shm_cpid;     /* 创建者 pid */
            ushort shm_lpid;     /* 上一次操作的进程的 pid */
            short shm_nattch;    /* 目前附着的进程数目 */
            time_t shm_atime;    /* 上一次附着的时间 */
            time_t shm_dtime;    /* 上一次脱离的时间 */
            time_t shm_ctime;    /* 上一次修改的时间 */

       shm_perm   ipc_perm 结构, 指明对共享内存段的访问权限.

       shm_segsz  共享内存段的大小, 以字节为单位.

       shm_cpid   创建该共享内存段的进程的 ID.

       shm_lpid   最后执行 shmat 或者 shmdt 系统调用的进程 ID.

       shm_nattch 当前对该共享内存段的活跃连接数.

       shm_atime  最后做 shmat 系统调用的时间.

       shm_dtime  最后做 shmdt 系统调用的时间.

       shm_ctime  最后做 shmctl 系统调用的时间, 如果该调用改变了 shmid_ds.

又见

       ftok(3), msgctl(2),  msgget(2),  msgrcv(2),  msgsnd(2),  semctl(2),  semget(2),  semop(2),
       shmat(2), shmctl(2), shmget(2), shmdt(2).

[中文版维护人]

       name <email>

[中文版最新更新]

       2001/02/02

《中国 Linux 论坛 man 手册页翻译计划》:

       http://cmpp.linuxforum.net

       本页面中文版由中文 man 手册页计划提供。
       中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh