table of contents
other languages
other sections
IPC(5) | Linux Programmer's Manual | IPC(5) |
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 */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
- 取得資源選項.
消息隊列¶
消息隊列由正整數 (它的 msqid) 唯一標識, 其結構體 struct msquid_ds 在 <sys/msg.h> 中定義, 包含如下成員: struct ipc_perm msg_perm;- 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;- sem_perm
- ipc_perm 結構, 指明對該信號燈集合的訪問權限.
- sem_otime
- 最近做 semop 系統調用的時間.
- sem_ctime
- 最近做 semctl 系統調用的時間, 該調用修改了上面結構的一個成員 或者改變了屬於該集合的一個信號燈.
- sem_nsems
- 該信號燈集合的信號燈數目. 集合中每個信號燈都可以用從 0 到 sem_nsems-1 的一個非負整數來引用.
- semval
- 該信號燈值,是一個非負整數.
- sempid
- 最後一個對該信號燈做操作的進程 ID.
- semncnt
- 等待增加 semval 的進程數.
- semznt
- 等待 semval 變成 0 的進程數.
共享記憶體段¶
共享記憶體段由正整數 (它的 shmid) 唯一標識, 有一個關聯的結構類型 struct shmid_ds 在 <sys/shm.h> 中定義, 包含如下成員: struct ipc_perm shm_perm;- 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.netNovember 1, 1993 | Linux 0.99.13 |