MQ_OPEN
Section: Linux Programmer's Manual (3)
Updated: 2020-08-13
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_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/ に書かれている。
 Index
- 名前
 - 
 - 書式
 - 
 - 説明
 - 
 - 返り値
 - 
 - エラー
 - 
 - 属性
 - 
 - 準拠
 - 
 - 注意
 - 
- C ライブラリとカーネルの違い
 - 
 
 - バグ
 - 
 - 関連項目
 - 
 - この文書について
 - 
 
This document was created by
man2html,
using the manual pages.
Time: 16:46:42 GMT, November 24, 2023