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