mq_receive(3)

الاسم
mq_receive, mq_timedreceive - استقبال رسالة من طابور رسائل

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

موجز
#include <mqueue.h>

ssize_t mq_receive(size_t msg_len;
                   mqd_t mqdes, char msg_ptr[msg_len],
                   size_t msg_len, unsigned int *msg_prio);

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

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

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

mq_timedreceive():
    _POSIX_C_SOURCE >= 200112L

الوصف
mq_receive() تزيل أقدم رسالة ذات الأولوية الأعلى من طابور الرسائل المشار إليه بواصف طابور الرسائل mqdes، وتضعها في المخزن المؤقت المشار إليه بـ msg_ptr. تحدد الوسيطة msg_len حجم المخزن المؤقت المشار إليه بـ msg_ptr؛ يجب أن يكون هذا أكبر من أو يساوي سمة mq_msgsize للطابور (انظر mq_getattr(3)). إذا لم يكن msg_prio فارغًا، فسيُستخدم المخزن المؤقت الذي يشير إليه لإرجاع الأولوية المرتبطة بالرسالة المستلمة.

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

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

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

قيمة الإرجاع
عند النجاح، mq_receive() و mq_timedreceive() تُرجعان عدد البايتات في الرسالة المستلمة؛ عند الخطأ، تُرجع -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_receive()، mq_timedreceive() | سلامة الخيوط | MT-Safe

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

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

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

انظر أيضًا
mq_close(3)، mq_getattr(3)، mq_notify(3)، mq_open(3)، mq_send(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.