MQ_SEND

Section: Linux Programmer's Manual (3)
Updated: 2020-08-13
Index JM Home Page
 

名前

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/ に書かれている。

関連キーワード

メッセージ   send   timedsend   メッセージキュー   キュー   timeout   優先度   属性   prio   記述   一杯   mqueue   size   time   struct   timespec   msgsize   格納   overview   シグナル   ハンドラー   中断   停止   block   message queue

Linux マニュアル 一覧

関連するコマンド・関数

mq_timedsend.3   mq_timedsend.2   mq_receive.3   mq_timedreceive.3   mq_open.2   mq_open.3
 

Index

名前
書式
説明
返り値
エラー
属性
準拠
注意
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 04:39:05 GMT, October 11, 2026