MQ_OPEN
Section: Linux Programmer's Manual (3)
Updated: 2009-02-20
Index
JM Home Page
roff page
 
名前
mq_open - メッセージキューをオープンする
 
書式
#include <fcntl.h>           /* For O_* constants */
#include <sys/stat.h>        /* For mode constants */
#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 の値の定義は
<fcntl.h>
のインクルードにより得られる)。
oflag
には、以下のうちいずれか一つを必ず指定しなければならない。
- O_RDONLY
- 
メッセージの受信専用としてキューをオープンする。
- O_WRONLY
- 
メッセージの送信専用としてキューをオープンする。
- O_RDWR
- 
メッセージの送受信両用としてキューをオープンする。
0 個以上の下記のフラグを、ビット単位の OR (論理和) で
oflag
に追加で指定できる。
- O_NONBLOCK
- 
非停止 (nonblocking) モードでキューをオープンする。
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)
と同じように指定する
(許可ビットのシンボル定義は
<sys/stat.h>
のインクルードにより得られる)。
許可設定はプロセスの umask でマスクされる。
attr
引き数は、キューの属性を指定する。詳細は、
mq_getattr(3)
を参照。
attr
が NULL の場合、キューは実装で定義されたデフォルト属性で作成される。
 
返り値
成功すると、
mq_open()
はメッセージキュー記述子 (message queue descriptor) を返す。
メッセージキュー記述子は他のメッセージキュー関連の関数で使用される。
エラーの場合、
mq_open()
は
(mqd_t) -1
を返し、
errno
にエラーを示す値を設定する。
 
エラー
- EACCES
- 
キューは存在するが、呼び出し元が指定されたモードでそのキュー
をオープンする許可を持たない。
- EACCES
- 
name
にスラッシュが 2 個以上含まれていた。
- 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
を持つキューが存在しない。
- ENOENT
- 
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: 03:26:49 GMT, April 25, 2010