Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
mq_send, mq_timedsend - メッセージキューにメッセージを送信する
書式
#include <mqueue.h> int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio); #include <time.h> #include <mqueue.h> int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec *abs_timeout); -lrt でリンクする。 glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): mq_timedsend(): _POSIX_C_SOURCE >= 200112L
説明
mq_send() は、メッセージキュー記述子 mqdes で参照されるメッセージキューに msg_ptr が指す メッセージを追加する。 msg_len 引数は、 msg_ptr が指すメッセージの長さを示す。この長さは キューの mq_msgsize 属性以下でなければならない。 長さが 0 のメッセージも認められている。 msg_prio 引数は、メッセージの優先度を指定する負でない整数である。 メッセージは優先度の降順 でキューに格納され、同じ優先度の新しいメッセージは 同じ優先度の古いメッセージの後ろに格納 される。メッセージの優先度の範囲については mq_overview(7) を参照。 メッセージキューがすでに一杯の場合 (すなわち、キューに入っているメッセージ数がキューの mq_maxmsg 属性と等しい場合)、デフォルトでは、 mq_send () は、メッセージをキューイングする のに十分な空間ができるか、 関数呼び出しがシグナルハンドラーにより中断されるまで、停止 (block) する。 メッセージキュー記述 (message queue description) で O_NONBLOCK フラグが有効 になっている場合は、 mq_send() はエラー EAGAIN ですぐに失敗する。 mq_timedsend() behaves just like mq_send(), except that if the queue is full and the O_NONBLOCK flag is not enabled for the message queue description, then abs_timeout points to a structure which specifies how long the call will block. This value is an absolute timeout in seconds and nanoseconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC), specified in the following structure: struct timespec { time_t tv_sec; /* 秒 */ long tv_nsec; /* ナノ秒 */ }; メッセージキューが一杯で、関数呼び出し時にすでにタイムアウト時刻が 過ぎている場合、 mq_timedsend() はすぐに返る。
返り値
成功すると、 mq_send() と mq_timedsend() は 0 を返す。 エラーの場合、-1 を返し、 errno にエラーを示す値を設定する。
エラー
EAGAIN キューが一杯で、かつ mqdes で参照されるメッセージキュー記述で O_NONBLOCK フラグが セットされていた。 EBADF The descriptor specified in mqdes was invalid or not opened for writing. EINTR 関数呼び出しがシグナルハンドラーにより中断された。 signal(7) 参照。 EINVAL 関数呼び出しは停止するはずであったが、 abs_timeout が不正であった。 abs_timeout が 不正とは、 tv_sec が 0 未満、もしくは tv_nsec が 0 未満か 1,000,000,000 より大き い、ということである。 EMSGSIZE msg_len がメッセージキューの mq_msgsize 属性よりも大きかった。 ETIMEDOUT メッセージが転送される前に関数呼び出しがタイムアウトした。
属性
この節で使用されている用語の説明については、 attributes(7) を参照。 ┌──────────────────────────┬───────────────┬─────────┐ │インターフェース │ 属性 │ 値 │ ├──────────────────────────┼───────────────┼─────────┤ │mq_send(), mq_timedsend() │ Thread safety │ MT-Safe │ └──────────────────────────┴───────────────┴─────────┘
準拠
POSIX.1-2001, POSIX.1-2008.
注意
Linux では、 mq_timedsend() はシステムコールである。 mq_send() はライブラリ関数で、 mq_timedsend() システムコールを用いて実装されている。
関連項目
mq_close(3), mq_getattr(3), mq_notify(3), mq_open(3), mq_receive(3), mq_unlink(3), mq_overview(7), time(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。