bionic (3) mq_open.3.gz

Provided by: manpages-ja-dev_0.5.0.0.20161015+dfsg-1_all bug

名前

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

       O_NONBLOCK
              非停止 (nonblocking) モードでキューをオープンする。 mq_receive(3)  と  mq_send(3)   は、通常は停止
              (block) する状況において、エラー EAGAIN で失敗するようになる。

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

       attr 引き数は、キューの属性を指定する。詳細は、 mq_getattr(3)  を参照。 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 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)  を参照。

属性

   マルチスレッディング (pthreads(7) 参照)
       関数 mq_open() はスレッドセーフである。

準拠

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