Provided by:
manpages-zh_1.5.1-3_all 
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號燈都可以用從 0 到
sem_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