mq_send(3)

الاسم
mq_send, mq_timedsend - إرسال رسالة إلى طابور رسائل

المكتبة
مكتبة الوقت الحقيقي (librt، -lrt)

موجز
#include <mqueue.h>

int mq_send(size_t msg_len;
              mqd_t mqdes, const char msg_ptr[msg_len],
              size_t msg_len, unsigned int msg_prio);

#include <time.h>
#include <mqueue.h>

int mq_timedsend(size_t msg_len;
              mqd_t mqdes, const char msg_ptr[msg_len],
              size_t msg_len, unsigned int msg_prio,
              const struct timespec *abs_timeout);

    متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

mq_timedsend():
    _POSIX_C_SOURCE >= 200112L

الوصف
تضيف mq_send() الرسالة المشار إليها بواسطة msg_ptr إلى طابور الرسائل المشار إليه بواسطة واصف طابور الرسائل mqdes. تُحدد الوسيطة msg_len طول الرسالة المشار إليها بواسطة msg_ptr؛ يجب أن يكون هذا الطول أقل من أو يساوي سمة mq_msgsize للطابور. يُسمح بالرسائل ذات الطول الصفري.

الوسيطة msg_prio هي عدد صحيح غير سالب يُحدد أولوية هذه الرسالة. تُوضع الرسائل في الطابور بترتيب تنازلي للأولوية، مع وضع الرسائل الأحدث من نفس الأولوية بعد الرسائل الأقدم ذات الأولوية نفسها. انظر mq_overview(7) للحصول على تفاصيل حول نطاق أولوية الرسالة.

إذا كان طابور الرسائل ممتلئًا بالفعل (أي أن عدد الرسائل في الطابور يساوي سمة mq_maxmsg للطابور)، فبشكل مبدئي، تُحجب mq_send() حتى يتوفر مساحة كافية للسماح بإدراج الرسالة في الطابور، أو حتى تُقاطع الاستدعاء بواسطة معالج إشارة. إذا كانت العلامة O_NONBLOCK مُفعّلة لوصف طابور الرسائل، فبدلاً من ذلك، يفشل الاستدعاء فورًا مع الخطأ EAGAIN.

تتصرف mq_timedsend() تمامًا مثل mq_send()، باستثناء أنه إذا كان الطابور ممتلئًا والعلامة O_NONBLOCK غير مُفعّلة لوصف طابور الرسائل، فإن abs_timeout يشير إلى بنية تُحدد المدة التي سيُحجب فيها الاستدعاء. هذه القيمة هي مهلة مطلقة بالثواني والنانوثانية منذ العصر، 1970-01-01 00:00:00 +0000 (UTC)، مُحددة في بنية timespec(3).

إذا كان طابور الرسائل ممتلئًا، وكانت المهلة قد انتهت بالفعل بحلول وقت الاستدعاء، فإن mq_timedsend() تعود فورًا.

قيمة الإرجاع
عند النجاح، تعود mq_send() و mq_timedsend() بصفر؛ عند الخطأ، يُعاد -1، مع ضبط errno للإشارة إلى الخطأ.

الأخطاء

EAGAIN
    كان الطابور ممتلئًا، ووُضعت العلامة O_NONBLOCK لوصف طابور الرسائل المشار إليه بواسطة mqdes.

EBADF
    الواصف المُحدد في mqdes كان غير صالح أو لم يُفتح للكتابة.

EINTR
    قُطع الاستدعاء بواسطة معالج إشارات؛ انظر signal(7).

EINVAL
    كان الاستدعاء سيعاق (blocked)، وكان abs_timeout غير صالح، إما لأن tv_sec كان أقل من الصفر، أو لأن tv_nsec كان أقل من الصفر أو أكبر من 1000 مليون.

EMSGSIZE
    كان msg_len أكبر من سمة mq_msgsize لطابور الرسائل.

ETIMEDOUT
    انتهت مهلة الاستدعاء قبل التمكن من نقل الرسالة.

السمات
للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).
الواجهة | السمة | القيمة
mq_send()، mq_timedsend() | سلامة الخيوط | MT-Safe

الإصدارات
في لينكس، mq_timedsend() هي استدعاء نظام، و mq_send() هي دالة مكتبة مبنية فوق ذلك الاستدعاء.

المعايير
POSIX.1-2008.

التاريخ
POSIX.1-2001.

انظر أيضًا
mq_close(3)، mq_getattr(3)، mq_notify(3)، mq_open(3)، mq_receive(3)، mq_unlink(3)، timespec(3)، mq_overview(7)، time(7)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.