Manpages

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 該 信 號 燈 集 合 的 信 號 燈 數 目

. 集 合 中 每 個 信 號 燈 都 可 以 用 從 0

sem_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