MQ_OPEN
Section: Linux Programmer's Manual (3)
Updated: 2006-02-25
Index
JM Home Page
roff page
名前
mq_open - メッセージキューをオープンする
書式
#include <mqueue.h>
mqd_t mq_open(const char *name, int oflag);
mqd_t mq_open(const char *name, int oflag, mode_t mode,
struct mq_attr *attr);
-lrt でリンクする。
説明
mq_open()
は、新しい POSIX メッセージキューを作成するか、既存のキューを
オープンする。キューは
name
で識別される。
name
の構成の詳細については
mq_overview (7)
を参照。
oflag
引き数には、関数呼び出しの操作を制御するフラグを指定する。
oflag
には、以下のうちいずれか一つを必ず指定しなければならない。
- O_RDONLY
-
メッセージの受信専用としてキューをオープンする。
- O_WRONLY
-
メッセージの送信専用としてキューをオープンする。
- O_RDWR
-
メッセージの送受信両用としてキューをオープンする。
0 個以上の下記のフラグを、ビット単位の OR (論理和) で
oflag
に追加で指定できる。
- O_NONBLOCK
-
非停止 (non-blocking) モードでキューをオープンする。
mq_receive(3)
と
mq_send(3)
は、通常は停止 (block) する状況において、エラー
EAGAIN
で失敗するようになる。
- O_CREAT
-
存在しない場合、メッセージキューを作成する。
メッセージキューの所有者 (ユーザ ID) とグループ所有権 (グループ ID) は、
それぞれ呼び出し元プロセスの実効ユーザ ID と実効グループ ID に設定される。
- O_EXCL
-
O_CREAT
が
oflag
に指定され、かつ指定された名前
name
を持つキューがすでに存在する場合、エラー
EEXIST
で失敗する。
oflag
に
O_CREAT
を指定する場合、追加で 2つの引き数を与える必要がある。
mode
引き数は、新しいキューに適用される許可設定 (permission) を、
open(2)
と同じように指定する。
許可設定はプロセスの umask でマスクされる。
attr
引き数は、キューの属性を指定する。詳細は、
mq_getattr(3)
を参照。
attr
が NULL の場合、キューは実装で定義されたデフォルト属性で作成される。
返り値
成功すると、
mq_open()
はメッセージキュー記述子 (message queue descriptor) を返す。
メッセージキュー記述子は他のメッセージキュー関連の関数で使用される。
エラーの場合、
mq_open()
は
(mqd_t) -1
を返し、
errno
にエラーを示す値を設定する。
エラー
- EACCES
-
キューは存在するが、呼び出し元が指定されたモードでそのキュー
をオープンする許可を持たない。
- EEXIST
-
oflag
に
O_CREAT
と
O_EXCL
の両方が指定されたが、指定された名前
name
を持つキューがすでに存在する。
- EINVAL
-
oflag
に
O_CREAT
が指定され、かつ
attr
が NULL 以外だが、
attr->mq_maxmsg
か
attr->mq_msqsize
が不正であった。
これらのフィールドは両方とも 0 より大きくなければならない。
プロセスが特権を持たない
(CAP_SYS_RESOURCE
ケーパビリティを持たない) 場合、
attr->mq_maxmsg
と
attr->mq_msgsize
は、それぞれ上限
msg_max、
msgsize_max
以下でなければならない。
また、特権プロセスの場合でも、
attr->mq_maxmsg
は
HARD_MAX
上限を超えることはできない。
(これらの上限に関する詳細は
mq_overview(7)
を参照。)
- EMFILE
-
そのプロセスがオープンしているファイルとメッセージキューの数が
プロセス毎の上限に達している。
- ENAMETOOLONG
-
name
が長すぎる。
- ENFILE
-
システム全体でオープンしているファイルとメッセージキューの合計数が
システム上限に達している。
- ENOENT
-
O_CREAT
フラグが
oflag
に指定されなかったが、指定された名前
name
を持つキューが存在しない。
- ENOMEM
-
十分なメモリがない。
- ENOSPC
-
新しいメッセージキューを作成するのに十分な空間がない。
このエラーはおそらく
queues_max
上限に抵触したため起こったのだろう。
mq_overview(7)
を参照。
準拠
POSIX.1-2001.
バグ
2.6.14 より前のカーネルには、
プロセスの umask が
mode
で指定された許可設定に適用されなかった。
関連項目
mq_close(3),
mq_getattr(3),
mq_notify(3),
mq_receive(3),
mq_send(3),
mq_unlink(3),
mq_overview(7)
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- バグ
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:53 GMT, November 19, 2007