plucky (3) mq_send.3.gz

Provided by: manpages-ja-dev_0.5.0.0.20221215+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():
           _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/ に書かれている。