Manpages

名 前

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_PRIVATEkey_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/ に 書 か れ て い る 。