Man page - msgget(2)

Packages contains this manual

Available languages:

en fr es pl ja ru ro

Manual

MSGGET

名 前
書 式
説 明
返 り 値
エ ラ ー
準 拠
注 意
Linux で の 注 意
バ グ
関 連 項 目
こ の 文 書 に つ い て

名 前

msgget - System V メ ッ セ ー ジ キ ュ ー 識 別 子 を 取 得 す る

書 式

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

int msgget(key_t key , int msgflg );

説 明

The msgget () system call returns the System V message queue identifier associated with the value of the key argument. It may be used either to obtain the identifier of a previously created message queue (when msgflg is zero and key does not have the value IPC_PRIVATE ), or to create a new set.

key の 値 が IPC_PRIVATE の 場 合 、 ま た は key IPC_PRIVATE で な く て も 、 key に 対 応 す る メ ッ セ ー ジ キ ュ ー が 存 在 せ ず 、 msgflg IPC_CREAT が 指 定 さ れ て い る 場 合 、 新 し い メ ッ セ ー ジ キ ュ ー が 作 成 さ れ る 。

msgflg IPC_CREAT IPC_EXCL の 両 方 が 指 定 さ れ た 場 合 、 key に 対 応 す る メ ッ セ ー ジ キ ュ ー が 既 に 存 在 す る と 、 msgget () は 失 敗 し 、 errno EEXIST が 設 定 さ れ る 。 (こ れ は open (2) に O_CREAT | O_EXCL を 指 定 し た 場 合 の 動 作 と 同 じ で あ る )

メ ッ セ ー ジ キ ュ ー の 作 成 時 に 、 msgflg 引 数 の 下 位 9 ビ ッ ト は 、 そ の メ ッ セ ー ジ キ ュ ー の ア ク セ ス 許 可 の 定 義 と し て 使 用 さ れ る 。 こ れ ら の 許 可 ビ ッ ト は open (2) の 引 数 mode と 同 じ 形 式 で 同 じ 意 味 で あ る 。 や creat (2) シ ス テ ム コ ー ル の ア ク セ ス 許 可 パ ラ メ ー タ ー と 同 じ 形 式 で 、 同 じ 意 味 を 持 つ 。 (但 し 、 実 行 (execute) 許 可 は 使 用 さ れ な い 。 )

新 規 の メ ッ セ ー ジ キ ュ ー を 作 成 す る 際 、 msgget () シ ス テ ム コ ー ル は メ ッ セ ー ジ キ ュ ー の デ ー タ 構 造 体 msqid_ds を 以 下 の よ う に 初 期 化 す る ( msqid_ds に つ い て は msgctl (2) を 参 照 ):

msg_perm.cuid msg_perm.uid に 呼 び 出 し 元 プ ロ セ ス の 実 効 (effective) ユ ー ザ ー ID を 設 定 す る 。

msg_perm.cgid msg_perm.gid に 呼 び 出 し 元 プ ロ セ ス の 実 効 (effective) グ ル ー プ ID を 設 定 す る 。

msg_perm.mode の 下 位 9 ビ ッ ト は msgflg の 下 位 9 ビ ッ ト を 設 定 す る 。

msg_qnum , msg_lspid , msg_lrpid , msg_stime , msg_rtime に 0 を 設 定 さ れ る 。

msg_ctime に 現 在 の 時 刻 を 設 定 す る 。

msg_qbytes に 、 シ ス テ ム で 決 め ら れ た メ ッ セ ー ジ キ ュ ー の 最 大 サ イ ズ MSGMNB を 設 定 す る 。

メ ッ セ ー ジ キ ュ ー が す で に 存 在 す る 場 合 は 、 ア ク セ ス 許 可 の 検 査 と 、 破 棄 (destruction) マ ー ク が な い か の 確 認 が 行 わ れ る 。

返 り 値

成 功 し た 場 合 、 返 り 値 は メ ッ セ ー ジ キ ュ ー 識 別 子 (非 負 の 整 数 ) と な る 。 失 敗 し た 場 合 は -1 が 返 さ れ 、 errno に そ の エ ラ ー が 示 さ れ る 。

エ ラ ー

失 敗 し た 場 合 、 errno に 以 下 の 値 の い ず れ か 一 つ が 設 定 さ れ る :

EACCES

A message queue exists for key , but the calling process does not have permission to access the queue, and does not have the CAP_IPC_OWNER capability in the user namespace that governs its IPC namespace.

EEXIST

msgflg IPC_CREAT IPC_EXCL が 指 定 さ れ た が 、 key に 対 応 す る メ ッ セ ー ジ キ ュ ー が す で に 存 在 す る 。

ENOENT

key に 対 応 す る メ ッ セ ー ジ キ ュ ー が 存 在 せ ず 、 msgflg IPC_CREAT が 指 定 さ れ て い な か っ た 。

ENOMEM

メ ッ セ ー ジ キ ュ ー を 作 成 し よ う と し た が 、 新 し い デ ー タ 構 造 体 を 作 成 す る の に 十 分 な メ モ リ ー が シ ス テ ム に 存 在 し な い 。

ENOSPC

メ ッ セ ー ジ キ ュ ー を 作 成 し よ う と し た が 、 作 成 す る と シ ス テ ム 全 体 の メ ッ セ ー ジ キ ュ ー 数 の 最 大 値 ( MSGMNI ) を 超 え て し ま う 。

準 拠

POSIX.1-2001, POSIX.1-2008, SVr4.

注 意

Linux や POSIX の 全 て の バ ー ジ ョ ン で は 、 <sys/types.h> <sys/ipc.h> の イ ン ク ル ー ド は 必 要 な い 。 し か し な が ら 、 い く つ か の 古 い 実 装 で は こ れ ら の ヘ ッ ダ ー フ ァ イ ル の イ ン ク ル ー ド が 必 要 で あ り 、 SVID で も こ れ ら の イ ン ク ル ー ド を す る よ う に 記 載 さ れ て い る 。 こ の よ う な 古 い シ ス テ ム へ の 移 植 性 を 意 図 し た ア プ リ ケ ー シ ョ ン で は こ れ ら の フ ァ イ ル を イ ン ク ル ー ド す る 必 要 が あ る か も し れ な い 。

IPC_PRIVATE は フ ラ グ で は な く 、 key_t 型 で あ る 。 こ の 特 別 な 値 が key と し て 使 用 さ れ た 場 合 、 msgget () シ ス テ ム コ ー ル は msgflg の 下 位 9 ビ ッ ト 以 外 の 全 て を 無 視 し て (成 功 し た 場 合 は ) 新 し い メ ッ セ ー ジ キ ュ ー を 作 成 す る 。

msgget () シ ス テ ム コ ー ル に 影 響 を 及 ぼ す メ ッ セ ー ジ キ ュ ー の 資 源 の シ ス テ ム と し て の 制 限 を 以 下 に 示 す :

MSGMNI

System-wide limit on the number of message queues. Before Linux 3.19, the default value for this limit was calculated using a formula based on available system memory. Since Linux 3.19, the default value is 32,000. On Linux, this limit can be read and modified via /proc/sys/kernel/msgmni .

Linux で の 注 意

Linux 2.3.20 ま で は 、 削 除 が 予 定 さ れ て い る メ ッ セ ー ジ キ ュ ー に 対 し て msgget () を 行 う と EIDRM が エ ラ ー と し て 返 さ れ る よ う に な っ て い た 。

バ グ

IPC_PRIVATE と い う 名 前 を 選 ん だ の は お そ ら く 失 敗 で あ ろ う 。 IPC_NEW の 方 が よ り 明 確 に そ の 機 能 を 表 し て い る だ ろ う 。

関 連 項 目

msgctl (2), msgrcv (2), msgsnd (2), ftok (3), capabilities (7), mq_overview (7), sysvipc (7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。