EN JA
MQ_OPEN(3)
MQ_OPEN(3) Linux Programmer's Manual MQ_OPEN(3)

名前

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_CREAToflag に指定され、かつ指定された名前 name を持つキューがすでに存在する場合、エラー EEXIST で失敗する。

oflagO_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
oflagO_CREATO_EXCL の両方が指定されたが、指定された名前 name を持つキューがすでに存在する。
EINVAL
oflagO_CREAT が指定され、かつ attr が NULL 以外だが、 attr->mq_maxmsgattr->mq_msqsize が不正であった。これらのフィールドは両方とも 0 より大きくなければならない。プロセスが特権を持たない ( CAP_SYS_RESOURCE ケーパビリティを持たない) 場合、 attr->mq_maxmsgattr->mq_msgsize は、それぞれ上限 msg_maxmsgsize_max 以下でなければならない。また、特権プロセスの場合でも、 attr->mq_maxmsgHARD_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)

この文書について

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