other versions
other sections
| 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
 - メッセージの送受信両用としてキューをオープンする。
 
- O_NONBLOCK
 - 非停止 (nonblocking) モードでキューをオープンする。 mq_receive(3) と mq_send(3) は、通常は停止 (block) する状況において、エラー EAGAIN で失敗するようになる。
 
- O_CREAT
 - 存在しない場合、メッセージキューを作成する。 メッセージキューの所有者 (ユーザ ID) とグループ所有権 (グループ ID) は、 それぞれ呼び出し元プロセスの実効ユーザ ID と実効グループ ID に設定される。
 
- O_EXCL
 - O_CREAT が oflag に指定され、かつ指定された名前 name を持つキューがすでに存在する場合、エラー EEXIST で失敗する。
 
返り値¶
成功すると、 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)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。| 2009-02-20 | Linux |