Provided by: manpages-zh_1.5.1-1_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

       本手冊雄A及   System   V  進程間通信機制在  Linux  下的實現:  消息隊列,
       信號燈集合,    以及共享記憶體段.    下探ㄗ       時,    就是指上-
       掖o些通信機制中的一種.

  Xv
       對每虒篞,  系統用一茼@有的 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  的低九位定義了對該資源的訪問野i,  以確定一-
       荌鶡璊F 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  類型,   而別的符號常數都是標誌域,它-
       怐漸i以或( OR )在一起形成 int 類型.

  C
       消息隊列由正整數  (它的  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 該隊列所允釭漁灡坏縣撜怳j字節總數.

       msg_lspid  最後做 msgsnd 系統調用的進程的 ID.

       msg_lrpid  最後做 msgrcv 系統調用的進程的 ID.

       msg_stime  最近做 msgsnd 系統調用的時間.

       msg_rtime  最近做 msgrcv 系統調用的時間.

       msg_ctime  最後一次改變 msqid_ds 結構成的時間.

  HOX
       信號燈集合由正整數  (它的  semid)   唯一標識,   並有一蚖P之關聯的結構體
       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  系統調用的時間,  該調用蚹鴾F上接硎c的一茼叔
                  或者改變了屬於該集合的一茷H號燈.

       sem_nsems  該信號燈集合的信號燈數目.  集合中每茷H號燈都可以用從  0sem_nsems-1 的一茷Dt整數來引用.

       一茷H號燈就是一 struct sem 結構, 包含如下成:

            ushort semval;  /* 信號燈 */
            short sempid;   /* 上一次操作的進程的 pid */
            ushort semncnt;      /* 等待增加 semval 熄i程數目 */
            ushort semzcnt;      /* 等待 semval = 0 的進程數目 */

       semval     該信號燈,是一茷Dt整數.

       sempid     最後一蚢儭茷H號燈做操作的進程 ID.

       semncnt    等待增加 semval 的進程數.

       semznt     等待 semval 變成 0 的進程數.

  @Oq
       共享記憶體段由正整數  (它的 shmid) 唯一標識, 有一蚚鶬p的結構類型 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.

S見
       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

m Linux manUpn:
       http://cmpp.linuxforum.net