名 前
svipc − System V プ ロ セ ス 間 通 信 機 構
書 式
#include
<sys/msg.h>
#include <sys/sem.h>
#include <sys/shm.h>
説 明
こ の マ ニ ュ ア ル ペ ー ジ は System V プ ロ セ ス 間 通 信 (interprocess communication; IPC) 機 構 の Linux に お け る 実 装 を 説 明 す る 。 こ の プ ロ セ ス 間 通 信 機 構 に は 、 メ ッ セ ー ジ キ ュ ー (message queue)、 セ マ フ ォ ー 集 合 (semaphore set)、 共 有 メ モ リ ー セ グ メ ン ト (shared memory segment) な ど が あ る 。 以 下 で 資 源 (resource) と い う 用 語 を 使 用 し た 場 合 に は こ れ ら の 機 構 の ど れ か を 意 味 す る 。 資 源 へ の ア ク セ ス 許 可 シ ス テ ム の そ れ ぞ れ の 資 源 は 、 IPC へ の 操 作 を 許 可 す る か ど う か を 決 定 す る た め の 情 報 を 共 通 の 構 造 体 struct ipc_perm に 格 納 し て 使 用 す る 。 ipc_perm 構 造 体 に は 以 下 の メ ン バ ー が 定 義 さ れ て い る :
struct ipc_perm
{
uid_t cuid; /* 作 成 者 の ユ
ー ザ ー ID */
gid_t cgid; /* 作 成 者 の グ
ル ー プ ID */
uid_t uid; /* 所 有 者 の ユ
ー ザ ー ID */
gid_t gid; /* 所 有 者 の グ
ル ー プ ID */
unsigned short mode; /* 読 み 書 き
の 許 可 */ };
ipc_perm 構 造 体 の mode メ ン バ ー は 以 下 の 9 ビ ッ ト で 、 プ ロ セ ス の IPC シ ス テ ム コ ー ル に よ る 資 源 へ の ア ク セ ス 許 可 を 定 義 す る 。 許 可 は 以 下 の よ う に 解 釈 さ れ る :
0400 ユ
ー ザ ー に よ る
読 み 込 み 。
0200 ユ ー ザ ー に よ
る 書 き 込 み 。
0040 グ ル ー プ に よ
る 読 み 込 み 。
0020 グ ル ー プ に よ
る 書 き 込 み 。
0004 他 人 に よ る 読
み 込 み 。
0002 他 人 に よ る 書
き 込 み 。 シ ス
テ ム は ビ ッ ト 0100,
0010, 0001 (実 行 ビ ッ ト )
は 使 用 し な い
。 さ ら に 、 セ
マ フ ォ ー の 場
合 に は "書 き 込
み (write)" は 実 際 に
は "変 更 (alter)" を
意 味 す る 。 同
じ ヘ ッ ダ ー フ
ァ イ ル に は 以
下 の シ ン ボ ル
の 定 義 が 含 ま
れ て い る :
IPC_CREAT キ ー |
(key)が 存 在 し な い 場 合 に は 新 た な エ ン ト リ ー を 作 成 す る 。 | ||
IPC_EXCL キ ー |
(key)が 存 在 す る 場 合 に は 失 敗 す る 。 | ||
IPC_NOWAIT 要 求 |
が 待 た さ れ る 場 合 に は エ ラ ー に な る 。
IPC_PRIVATE プ ラ イ ベ ー ト キ ー 。 |
||
IPC_RMID 資 源 を 削 除 す る 。 |
||
IPC_SET 資 源 に オ プ シ ョ ン を 設 定 す る 。 |
||
IPC_STAT 資 源 の オ プ シ ョ ン を 取 得 す る 。 |
IPC_PRIVATE は key_t 型 で あ る 。 そ の 他 の 全 て の シ ン ボ ル は フ ラ グ フ ィ ー ル ド と し て int 変 数 に OR 演 算 で 格 納 す る こ と が で き る 。 メ ッ セ ー ジ キ ュ ー メ ッ セ ー ジ キ ュ ー は 正 の 整 数 (msqid) に よ っ て 識 別 さ れ 、 <sys/msg.h> に 定 義 さ れ て い る 構 造 体 struct msqid_ds に 結 び つ け ら れ て い る 。 こ の 構 造 体 は 以 下 の メ ン バ ー を 含 ん で い る :
struct msqid_ds
{
struct ipc_perm msg_perm;
msgqnum_t msg_qnum; /* キ ュ ー に
あ る メ ッ セ ー
ジ の 数 */
msglen_t msg_qbytes; /* キ ュ ー の
最 大 バ イ ト 数 */
pid_t msg_lspid; /* 最 後 に msgsnd(2)
を し た PID */
pid_t msg_lrpid; /* 最 後 に msgrcv(2)
を し た PID */
time_t msg_stime; /* 最 後 に msgsnd(2)
を し た 時 間 */
time_t msg_rtime; /* 最 後 に msgrcv(2)
を し た 時 間 */
time_t msg_ctime; /* 最 後 に 変
更 さ れ た 時 間 */
};
msg_perm メ ッ セ ー ジ キ ュ ー へ の ア ク セ ス 許 可 を 指 定 す る |
ipc_perm 構 造 体 。 | |
msg_qnum 現 在 、 こ の メ ッ セ ー ジ キ ュ ー に あ る メ ッ セ ー ジ の |
数 。
msg_qbytes メ ッ セ ー ジ キ ュ ー に 入 れ る こ と が で き る メ ッ セ ー ジ の 最 大 バ イ ト 数 。 | |
msg_lspid 最 後 に |
msgsnd(2) シ ス テ ム コ ー ル を 行 な っ た プ ロ セ ス の ID。
msg_lrpid 最 後 に |
msgrcv(2) シ ス テ ム コ ー ル を 行 な っ た プ ロ セ ス の ID。 | ||
msg_stime 最 後 に |
msgsnd(2) シ ス テ ム コ ー ル を 行 な っ た 時 間 。 | ||
msg_rtime 最 後 に |
msgrcv(2) を 行 な っ た 時 間 。 | ||
msg_ctime 最 後 に |
msqid_ds 構 造 体 の メ ン バ ー が 変 更 さ れ た 時 間 。 |
セ マ フ ォ ー 集 合 セ マ フ ォ ー 集 合 は 正 の 整 数 (semid) に よ っ て 識 別 さ れ 、 <sys/sem.h> に 定 義 さ れ て い る 構 造 体 struct semid_ds に 結 び つ け ら れ て い る 。 こ の 構 造 体 は 以 下 の メ ン バ ー を 含 ん で い る :
struct semid_ds
{
struct ipc_perm sem_perm;
time_t sem_otime; /* 最 後 に 操
作 し た 時 間 */
time_t sem_ctime; /* 最 後 に 変
更 し た 時 間 */
unsigned long sem_nsems; /* 集 合 の
中 に あ る セ マ
フ ォ ー 数 */ };
sem_perm セ マ フ ォ ー 集 合 へ の ア ク セ ス 許 可 を 指 定 す る |
ipc_perm 構 造 体 。 | ||
sem_otime 最 後 に |
semop(2) シ ス テ ム コ ー ル を 行 な っ た 時 間 。
sem_ctime 最 後 に |
semctl(2) を 行 な っ て 上 記 の 構 造 体 の メ ン バ ー を 変 更 す る |
か 、 セ マ フ ォ ー 集 合 に 属 す る セ マ フ ォ ー を 変 更 し た 時 間 。
sem_nsems セ マ フ ォ ー 集 合 の 中 に あ る セ マ フ ォ ー の 数 。 集 合 の 中 に あ る そ れ ぞ れ の セ マ フ ォ ー は 負 で な い 整 数 に よ っ て 参 照 さ れ 、 |
0 か ら sem_nsems−1 ま で の 番 号 を 持 つ 。 セ マ フ ォ ー は struct sem 型 の デ ー タ 構 造 体 で あ り 、 以 下 の メ ン バ ー を 含 ん で い る :
struct sem {
int semval; /* セ マ フ ォ ー
の 値 */
int sempid; /* 最 後 に 操 作
し た プ ロ セ ス ID */
};
semval セ マ フ ォ ー 値 : 負 で な い 整 数 。 |
||||
sempid こ の セ マ フ ォ ー を 最 後 に 操 作 し た プ ロ セ ス の |
ID。 |
共 有 メ モ リ ー セ グ メ ン ト 共 有 メ モ リ ー セ グ メ ン ト は 正 の 整 数 (shmid) に よ っ て 識 別 さ れ 、 <sys/shm.h> に 定 義 さ れ て い る struct shmid_ds 構 造 体 に 結 び つ け ら れ て い る 。 こ の 構 造 体 は 以 下 の メ ン バ ー を 含 ん で い る :
struct shmid_ds
{
struct ipc_perm shm_perm;
size_t shm_segsz; /* セ グ メ ン
ト の サ イ ズ */
pid_t shm_cpid; /* 作 成 者 の
プ ロ セ ス ID */
pid_t shm_lpid; /* 最 後 に 操
作 し た プ ロ セ
ス ID */
shmatt_t 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(2) ま た は shmdt(2) シ ス テ ム コ ー ル を 実 行 し た プ ロ セ ス の ID。
shm_nattch こ の 共 有 メ モ リ ー セ グ メ ン ト を メ モ リ ー に 付 加 |
(attach) し て い る |
プ ロ セ ス の 数 。
shm_atime 最 後 に |
shmat(2) シ ス テ ム コ ー ル を 行 な っ た 時 間 。 | ||
shm_dtime 最 後 に |
shmdt(2) シ ス テ ム コ ー ル を 行 な っ た 時 間 。 | ||
shm_ctime 最 後 に |
shmctl(2) シ ス テ ム コ ー ル を 行 な っ て 、 shmid_ds 構 造 体 |
を 変 更 し た 時 間 。
IPC 名
前 空 間
System V IPC オ ブ ジ ェ ク
ト と IPC 名 前 空 間
の 相 互 の 影 響
に 関 す る 議 論
は namespaces(7) を 参 照
。
関 連 項 目
ipcmk(1), ipcrm(1), ipcs(1), ipc(2), msgctl(2), msgget(2), msgrcv(2), msgsnd(2), semctl(2), semget(2), semop(2), shmat(2), shmctl(2), shmdt(2), shmget(2), ftok(3), namespaces(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。