Linux repositories inspector

mq_send(3) - Japanese

Linux
2014-06-03
Aliases: mq_timedsend(2), mq_timedsend(2), mq_timedsend(2), mq_timedsend(2), mq_timedsend(2), mq_timedsend(2), mq_timedsend(3), mq_timedsend(3), mq_timedsend(3), mq_timedsend(3), mq_timedsend(3), mq_timedsend(3)

manpages-ja-dev

Japanese version of the manual pages (for developers)

man-pages-ja

Japanese man (manual) pages from the Japanese Manual Project

manpages-dev

Manual pages about using GNU/Linux for development

man-pages

Linux kernel and C library user-space interface documentation

名前

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():
_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L

説明

mq_send() は、記述子 mqdes で参照されるメッセージキューに msg_ptr が指すメッセージを追加する。 msg_len 引き数は、 msg_ptr が指すメッセージの長さを示す。この長さはキューの mq_msgsize 属性以下でなければならない。 長さが 0 のメッセージも認められている。
msg_prio 引き数は、メッセージの優先度を指定する負でない整数である。 メッセージは優先度の降順でキューに格納され、同じ優先度の新しいメッセージは 同じ優先度の古いメッセージの後ろに格納される。
メッセージキューがすでに一杯の場合 (すなわち、キューに入っているメッセージ数がキューの mq_maxmsg 属性と等しい場合)、デフォルトでは、 mq_send () は、メッセージをキューイングするのに十分な空間ができるか、 関数呼び出しがシグナルハンドラーにより中断されるまで、停止 (block) する。 メッセージキュー記述 (message queue description) で O_NONBLOCK フラグが有効になっている場合は、 mq_send() はエラー EAGAIN ですぐに失敗する。
mq_timedsend() は mq_send() と全く同じ動作をするが、 メッセージキューが一杯で、メッセージキュー記述で O_NONBLOCK フラグが有効になっていない場合に、この呼び出しが停止する時間の上限を abs_timeout が指す構造体で指定する点が異なる。この上限は、タイムアウトの時刻を 時刻紀元 (Epoch; 1970-01-01 00:00:00 +0000 (UTC)) からの経過時間 (秒とナノ秒の組) で指定する。タイムアウト時刻は以下の構造体で指定する:
struct timespec {
    time_t tv_sec;        /* 秒 */
    long   tv_nsec;       /* ナノ秒 */
};

メッセージキューが一杯で、関数呼び出し時にすでにタイムアウト時刻が 過ぎている場合、 mq_timedsend() はすぐに返る。

返り値

成功すると、 mq_send() と mq_timedsend() は 0 を返す。 エラーの場合、-1 を返し、 errno にエラーを示す値を設定する。

エラー

EAGAIN キューが一杯で、かつ mqdes で参照されるメッセージキュー記述で O_NONBLOCK フラグがセットされていた。
EBADF mqdes で指定された記述子が不正である。
EINTR 関数呼び出しがシグナルハンドラーにより中断された。 signal(7) 参照。
EINVAL 関数呼び出しは停止するはずであったが、 abs_timeout が不正であった。 abs_timeout が不正とは、 tv_sec が 0 未満、もしくは tv_nsec が 0 未満か 1,000,000,000 より大きい、ということである。
EMSGSIZE
msg_len がメッセージキューの mq_msgsize 属性よりも大きかった。
ETIMEDOUT
メッセージが転送される前に関数呼び出しがタイムアウトした。

属性

マルチスレッディング (pthreads(7) 参照)

関数 mq_send() と mq_timedsend() はスレッドセーフである。

準拠

POSIX.1-2001.

注意

Linux では、 mq_timedsend() はシステムコールである。 mq_send() はライブラリ関数で、 mq_timedsend() システムコールを用いて実装されている。

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。
⇧ Top