mq_getattr(3)

الاسم
mq_getattr, mq_setattr - جلب/تعيين خصائص طابور الرسائل

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

موجز
#include <mqueue.h>

int mq_getattr(mqd_t mqdes, struct mq_attr *attr);
int mq_setattr(mqd_t mqdes, const struct mq_attr *restrict newattr,
               struct mq_attr *restrict oldattr);

الوصف
mq_getattr() و mq_setattr() تجلب وتعدل على التوالي خصائص طابور الرسائل المشار إليه بواسطة واصف طابور الرسائل mqdes.

mq_getattr() تُرجع بنية mq_attr في المخزن المؤقت المشار إليه بواسطة attr. هذه البنية تُعرف كالتالي:

    struct mq_attr {
        long mq_flags;       /* الرايات: 0 أو O_NONBLOCK */
        long mq_maxmsg;      /* الحد الأقصى لعدد الرسائل في الطابور */
        long mq_msgsize;     /* الحد الأقصى لحجم الرسالة (بالبايت) */
        long mq_curmsgs;     /* عدد الرسائل الموجودة في الطابور حالياً */
    };

حقل mq_flags يحتوي على أعلام مرتبطة بوصف طابور الرسائل المفتوح. هذا الحقل يُهيأ عندما يُنشأ الطابور بواسطة mq_open(3). العلم الوحيد الذي يمكن أن يظهر في هذا الحقل هو O_NONBLOCK.

حقل mq_maxmsg و mq_msgsize يُضبطان عندما يُنشأ طابور الرسائل بواسطة mq_open(3). حقل mq_maxmsg هو حد أعلى لعدد الرسائل التي يمكن وضعها في الطابور باستخدام mq_send(3). حقل mq_msgsize هو حد أعلى لحجم الرسائل التي يمكن وضعها في الطابور. كلا هذين الحقلين يجب أن يكون لهما قيمة أكبر من الصفر. ملفا /proc يضعان سقوفًا لقيم هذه الحقول موصوفان في mq_overview(7).

حقل mq_curmsgs يُرجع عدد الرسائل المحتجزة حاليًا في الطابور.

mq_setattr() يضبط خصائص طابور الرسائل باستخدام المعلومات المقدمة في بنية mq_attr المشار إليها بواسطة newattr. الخاصية الوحيدة التي يمكن تعديلها هي ضبط العلم O_NONBLOCK في mq_flags. الحقول الأخرى في newattr تُتجاهل. إذا كان حقل oldattr ليس NULL، فإن المخزن المؤقت الذي يشير إليه يُستخدم لإرجاع بنية mq_attr تحتوي على نفس المعلومات التي تُرجعها mq_getattr().

قيمة الإرجاع
عند النجاح mq_getattr() و mq_setattr() يُرجعان 0؛ عند الخطأ، يُرجع -1، مع ضبط errno للإشارة إلى الخطأ.

الأخطاء

EBADF
    واصف قائمة رسائل المحدد في mqdes غير صالح.

EINVAL
    newattr->mq_flags احتوى على بتات مضبوطة غير O_NONBLOCK.

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

الإصدارات
على لينكس، mq_getattr() و mq_setattr() هما دالتا مكتبة مبنيتان فوق استدعاء النظام mq_getsetattr(2).

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

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

أمثلة
البرنامج أدناه يمكن استخدامه لعرض القيم المبدئية mq_maxmsg و mq_msgsize التي تُسند إلى طابور رسائل يُنشأ باستدعاء mq_open(3) حيث معامل attr هو NULL. إليك مثال لتشغيل البرنامج:

    $ ./a.out /testq;
    Maximum # of messages on queue:   10
    Maximum message size:             8192

منذ لينكس 3.5، ملفات /proc التالية (الموصوفة في mq_overview(7)) يمكن استخدامها للتحكم في المبدئيات:

    $ uname -sr;
    Linux 3.8.0
    $ cat /proc/sys/fs/mqueue/msg_default;
    10
    $ cat /proc/sys/fs/mqueue/msgsize_default;
    8192

  مصدر البرنامج
    #include <err.h>
    #include <fcntl.h>
    #include <mqueue.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/stat.h>
    #include <unistd.h>

    int
    main(int argc, char *argv[])
    {
        mqd_t mqd;
        struct mq_attr attr;

        if (argc != 2) {
            fprintf(stderr, "Usage: %s mq-name\n", argv[0]);
            exit(EXIT_FAILURE);
        }

        mqd = mq_open(argv[1], O_CREAT | O_EXCL, 0600, NULL);
        if (mqd == (mqd_t) -1)
            err(EXIT_FAILURE, "mq_open");

        if (mq_getattr(mqd, &attr) == -1)
            err(EXIT_FAILURE, "mq_getattr");

        printf("Maximum # of messages on queue:   %ld\n", attr.mq_maxmsg);
        printf("Maximum message size:             %ld\n", attr.mq_msgsize);

        if (mq_unlink(argv[1]) == -1)
            err(EXIT_FAILURE, "mq_unlink");

        exit(EXIT_SUCCESS);
    }

انظر أيضًا
mq_close(3), mq_notify(3), mq_open(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7)

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

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

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