#include <mqueue.h>
mqd_t mq_send(mqd_t mqdes, const char *msg_ptr,
size_t msg_len, unsigned msg_prio);
#define _XOPEN_SOURCE 600
#include <time.h>
#include <mqueue.h>
mqd_t mq_timedsend(mqd_t mqdes, const char *msg_ptr,
size_t msg_len, unsigned msg_prio,
const struct timespec *abs_timeout);
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 年 1 月 1 日 00:00:00) からの経過時間 (秒とナノ秒の組) で指定する。タイムアウト時刻は以下の構造体で指定する:
struct timespec {
time_t tv_sec; /* 秒 */
long tv_nsec; /* ナノ秒 */
};