Scroll to navigation

mq_open(3) Library Functions Manual mq_open(3)

الاسم

mq_open - فتح طابور رسائل

المكتبة

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

موجز

#include <fcntl.h>           /* من أجل ثوابت O_* */
#include <sys/stat.h>        /* من أجل ثوابت الوضع */
#include <mqueue.h>
mqd_t mq_open(const char *name, int oflag);
mqd_t mq_open(const char *name, int oflag, mode_t mode,
              struct mq_attr *attr);

الوصف

تنشئ mq_open() طابور رسائل POSIX جديد أو تفتح طابورًا موجودًا. يُحدد الطابور بواسطة name. للتفاصيل حول بناء name، انظر mq_overview(7).

يحدد المعامل oflag الأعلام التي تتحكم في عملية الاستدعاء. (يمكن الحصول على تعريفات قيم الأعلام بتضمين <fcntl.h>.) يجب تحديد واحد بالضبط مما يلي في oflag:

فتح الطابور لاستقبال الرسائل فقط.
فتح الطابور لإرسال الرسائل فقط.
فتح الطابور لإرسال واستقبال الرسائل معًا.

يمكن إضافة صفر أو أكثر من الأعلام التالية بعملية OR في oflag:

يضبط علم الإغلاق عند التنفيذ لوصف طابور الرسائل. انظر open(2) لمناقشة فائدة هذا العلم.
ينشئ طابور الرسائل إذا لم يكن موجودًا. يُضبط المالك (معرف المستخدم) لطابور الرسائل على معرف المستخدم الفعّال للعملية المستدعية. تُضبط ملكية المجموعة (معرف المجموعة) على معرف المجموعة الفعّال للعملية المستدعية.
إذا حُدد O_CREAT في oflag، وكان طابور بالاسم name المحدد موجودًا بالفعل، فسيفشل الاستدعاء مع الخطأ EEXIST.
يفتح الطابور في وضع عدم الحظر. في الظروف التي كانت فيها mq_receive(3) و mq_send(3) ستحظر عادةً، تفشل هذه الدوال بدلاً من ذلك مع الخطأ EAGAIN.

إذا حُدد O_CREAT في oflag، فيجب توفير معاملين إضافيين. يحدد المعامل mode الأذونات التي ستوضع على الطابور الجديد، كما في open(2). (يمكن الحصول على التعريفات الرمزية لبتات الأذونات بتضمين <sys/stat.h>.) تُقنّع إعدادات الأذونات بقناع umask للعملية.

تحدد حقول struct mq_attr المشار إليها بواسطة attr العدد الأقصى للرسائل والحجم الأقصى للرسائل الذي سيسمح به الطابور. يُعرف هذا الهيكل كما يلي:


struct mq_attr {

long mq_flags; /* الأعلام (تُتجاهل لـ mq_open()) */
long mq_maxmsg; /* العدد الأقصى للرسائل في الطابور */
long mq_msgsize; /* الحجم الأقصى للرسالة (بايت) */
long mq_curmsgs; /* عدد الرسائل الموجودة حاليًا في الطابور
(يُتجاهل لـ mq_open()) */ };

تُستخدم حقول mq_maxmsg و mq_msgsize فقط عند استدعاء mq_open()؛ تُتجاهل القيم في الحقول المتبقية.

إذا كان attr NULL، فسيُنشأ الطابور بسمات مبدئية محددة بالتنفيذ. منذ لينكس 3.5، يمكن استخدام ملفين /proc للتحكم في هذه المبدئيات؛ انظر mq_overview(7) للتفاصيل.

قيمة الإرجاع

عند النجاح، تُرجع mq_open() واصف طابور رسائل لاستخدامه من قبل دوال طابور الرسائل الأخرى. عند الخطأ، تُرجع mq_open() (mqd_t) -1، مع ضبط errno للإشارة إلى الخطأ.

الأخطاء

قائمة الانتظار موجودة، لكن المتصل لا يملك صلاحية فتحها بالوضع المحدد.
احتوى name على أكثر من شرطة مائلة واحدة.
حُدد كل من O_CREAT و O_EXCL في oflag، لكن قائمة انتظار بهذا name موجودة مسبقًا.
لا يتبع name التنسيق المذكور في mq_overview(7).
حُدد O_CREAT في oflag، وكان attr غير فارغ، لكن attr->mq_maxmsg أو attr->mq_msqsize كان غير صالح. يجب أن يكون كلا هذين الحقلين أكبر من الصفر. في عملية غير مميزة (لا تملك القدرة CAP_SYS_RESOURCE)، يجب أن يكون attr->mq_maxmsg أقل من أو يساوي حد msg_max، ويجب أن يكون attr->mq_msgsize أقل من أو يساوي حد msgsize_max. بالإضافة إلى ذلك، حتى في عملية مميزة، لا يمكن أن يتجاوز attr->mq_maxmsg حد HARD_MAX. (انظر mq_overview(7) لتفاصيل هذه الحدود.)
وُصل إلى الحد الخاص بكل عملية لعدد واصفات الملفات وقوائم انتظار الرسائل المفتوحة (انظر وصف RLIMIT_NOFILE في getrlimit(2)).
الاسم name كان طويلاً جداً.
وُصل إلى الحد على مستوى النظام للعدد الإجمالي للملفات وقوائم انتظار الرسائل المفتوحة.
لم يحُدد العلم O_CREAT في oflag، ولا توجد قائمة انتظار بهذا name.
كان name مجرد "/" دون أحرف أخرى بعده.
ذاكرة غير كافية.
مساحة غير كافية لإنشاء قائمة انتظار رسائل جديدة. حدث هذا غالبًا بسبب الوصول إلى حد queues_max؛ انظر mq_overview(7).

السمات

للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).

الواجهة السمة القيمة
mq_open() سلامة الخيوط MT-Safe

الإصدارات

الاختلافات بين مكتبة C والنواة

دالة المكتبة mq_open() مطبقة فوق استدعاء نظام بنفس الاسم. تقوم دالة المكتبة بالتحقق من أن name يبدأ بشرطة مائلة (/) وتعطي الخطأ EINVAL إذا لم يبدأ بها. يتوقع استدعاء النظام في النواة ألا يحتوي name على شرطة مائلة سابقة، لذا تمرر دالة مكتبة C name بدون الشرطة المائلة السابقة (أي name+1) إلى استدعاء النظام.

المعايير

POSIX.1-2008.

التاريخ

POSIX.1-2001.

العلل

قبل لينكس 2.6.14، لم يكن umask العملية مطبقًا على الأذونات المحددة في mode.

انظر أيضًا

mq_close(3), mq_getattr(3), mq_notify(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7)

ترجمة

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

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

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

8 فبراير 2026 صفحات دليل لينكس 6.18