MQ_OPEN

Section: Linux Programmer's Manual (3)
Updated: 2020-08-13
Index JM Home 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_CLOEXEC (Linux 2.6.26 以降)
メッセージキュー記述子に close-on-exec フラグをセットする。 なぜこのフラグが有用かについての議論は open(2) を参照。
O_CREAT
存在しない場合、メッセージキューを作成する。 メッセージキューの所有者 (ユーザー ID) とグループ所有権 (グループ ID) は、 それぞれ呼び出し元プロセスの実効ユーザー ID と実効グループ ID に設定される。
O_EXCL
O_CREAT が oflag に指定され、かつ指定された名前 name を持つキューがすでに存在する場合、エラー EEXIST で失敗する。
O_NONBLOCK
非停止 (nonblocking) モードでキューをオープンする。 mq_receive(3) と mq_send(3) は、通常は停止 (block) する状況において、エラー EAGAIN で失敗するようになる。

oflag に O_CREAT を指定する場合、追加で 2つの引数を与える必要がある。 mode 引数は、新しいキューに適用される許可設定 (permission) を、 open(2) と同じように指定する (許可ビットのシンボル定義は <sys/stat.h> のインクルードにより得られる)。 許可設定はプロセスの umask でマスクされる。

The fields of the struct mq_attr pointed to attr specify the maximum number of messages and the maximum size of messages that the queue will allow. This structure is defined as follows:

struct mq_attr {
    long mq_flags;       /* フラグ (mq_open() では無視される) */
    long mq_maxmsg;      /* キューの最大メッセージ数 */
    long mq_msgsize;     /* 最大メッセージサイズ (バイト単位) */
    long mq_curmsgs;     /* キューに現在入っているメッセージ数
                            (mq_open() では無視される) */ };

Only the mq_maxmsg and mq_msgsize fields are employed when calling mq_open(); the values in the remaining fields are ignored.

attr が NULL の場合、キューは実装で定義されたデフォルト属性で作成される。 Linux 3.5 以降では、2 つの /proc ファイルがあり、これらのデフォルト値を制御できる。 詳細は mq_overview(7) を参照。  

返り値

成功すると、 mq_open() はメッセージキュー記述子 (message queue descriptor) を返す。 メッセージキュー記述子は他のメッセージキュー関連の関数で使用される。 エラーの場合、 mq_open() は (mqd_t) -1 を返し、 errno にエラーを示す値を設定する。  

エラー

EACCES
キューは存在するが、呼び出し元が指定されたモードでそのキュー をオープンする許可を持たない。
EACCES
name にスラッシュが 2 個以上含まれていた。
EEXIST
oflag に O_CREAT と O_EXCL の両方が指定されたが、指定された名前 name を持つキューがすでに存在する。
EINVAL
name doesn't follow the format in mq_overview(7).
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
The per-process limit on the number of open file and message queue descriptors has been reached (see the description of RLIMIT_NOFILE in getrlimit(2)).
ENAMETOOLONG
name が長過ぎる。
ENFILE
システム全体でオープンしているファイルとメッセージキューの合計数がシステム全体の上限に達している。
ENOENT
O_CREAT フラグが oflag に指定されなかったが、指定された名前 name を持つキューが存在しない。
ENOENT
name が "/" だけで、その後ろに他の文字が続いていなかった。
ENOMEM
十分なメモリーがない。
ENOSPC
新しいメッセージキューを作成するのに十分な空間がない。 このエラーはおそらく queues_max 上限に抵触したため起こったのだろう。 mq_overview(7) を参照。
 

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース 属性 値
mq_open() Thread safety MT-Safe
 

準拠

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

注意

 

C ライブラリとカーネルの違い

The mq_open() library function is implemented on top of a system call of the same name. The library function performs the check that the name starts with a slash (/), giving the EINVAL error if it does not. The kernel system call expects name to contain no preceding slash, so the C library function passes name without the preceding slash (i.e., name+1) to the system call.  

バグ

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

関連キーワード

キュー   メッセージキュー   オープン   overview   フラグ   メッセージ   許可   maxmsg   上限   long   attr   詳細   記述   グループ   fields   msgsize   library   system   call   slash   fcntl   constants   stat   mode   struct

Linux マニュアル 一覧

関連するコマンド・関数

mq_open.2   mq_getattr.3   mq_setattr.3   mq_overview.7   mq_unlink.2   mq_unlink.3
 

Index

名前
書式
説明
返り値
エラー
属性
準拠
注意
C ライブラリとカーネルの違い
バグ
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:31 GMT, October 11, 2026