| mq_receive(3) | Library Functions Manual | 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);
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 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 8 فبراير 2026 | صفحات دليل لينكس 6.18 |