MQ_SEND(3) | Linux Programmer's Manual | MQ_SEND(3) |
名前
mq_send, mq_timedsend -メッセージキューにメッセージを送信する書式
#include <mqueue.h>
int mq_send(mqd_t mqdes , const char * msg_ptr ,
size_t msg_len , unsigned msg_prio );
#include <time.h>
#include <mqueue.h>
int mq_timedsend(mqd_t mqdes , const char * msg_ptr ,
size_t msg_len , unsigned msg_prio ,
const struct timespec * abs_timeout );
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L
説明
mq_send() は、記述子 mqdes で参照されるメッセージキューに msg_ptr が指すメッセージを追加する。 msg_len 引き数は、 msg_ptr が指すメッセージの長さを示す。この長さはキューの mq_msgsize 属性以下でなければならない。長さが 0 のメッセージも認められている。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
- メッセージが転送される前に関数呼び出しがタイムアウトした。
準拠
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.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2010-09-20 | Linux |