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

名前

       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()  システムコールを用いて実装されている。

関連項目

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