pthread_sigmask(3)

الاسم
pthread_sigmask - فحص وتغيير قناع الإشارات المحجوبة

المكتبة
مكتبة مسالك POSIX (libpthread، -lpthread)

موجز
#include <signal.h>

int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);

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

pthread_sigmask():
    _POSIX_C_SOURCE >= 199506L || _XOPEN_SOURCE >= 500

الوصف
الدالة pthread_sigmask() تشبه تمامًا sigprocmask(2)، مع الفارق أن استخدامها في البرامج متعددة الخيوط محدد صراحةً بواسطة POSIX.1. الفروق الأخرى مذكورة في هذه الصفحة.

لوصف المعاملات وتشغيل هذه الدالة، انظر sigprocmask(2).

قيمة الإرجاع
عند النجاح، تُرجع pthread_sigmask() 0؛ عند الخطأ، تُرجع رقم خطأ.

الأخطاء
انظر sigprocmask(2).

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

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

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

ملاحظات
يرث الخيط الجديد نسخة من قناع الإشارات لمنشئه.

تتجاهل دالة glibc pthread_sigmask() بصمت محاولات حجب إشارتي الوقت الفعلي المستخدمتين داخليًا بواسطة تطبيق الخيوط NPTL. انظر nptl(7) للتفاصيل.

أمثلة
يحجب البرنامج أدناه بعض الإشارات في الخيط الرئيس، ثم ينشئ خيطًا مخصصًا لجلب تلك الإشارات عبر sigwait(3). توضح جلسة الصدفة التالية استخدامه:

    $ ./a.out &
    [1] 5423
    $ kill -QUIT %1
    Signal handling thread got signal 3
    $ kill -USR1 %1
    Signal handling thread got signal 10
    $ kill -TERM %1
    [1]+  Terminated              ./a.out

  مصدر البرنامج
    #include <err.h>
    #include <errno.h>
    #include <pthread.h>
    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    /* Simple error handling functions */

    static void *
    sig_thread(void *arg)
    {
        sigset_t *set = arg;
        int s, sig;

        for (;;) {
            s = sigwait(set, &sig);
            if (s != 0)
                errc(EXIT_FAILURE, s, "sigwait");
            printf("Signal handling thread got signal %d\n", sig);
        }
    }

    int
    main(void)
    {
        pthread_t thread;
        sigset_t set;
        int s;

        /* Block SIGQUIT and SIGUSR1; other threads created by main()
           will inherit a copy of the signal mask.  */

        sigemptyset(&set);
        sigaddset(&set, SIGQUIT);
        sigaddset(&set, SIGUSR1);
        s = pthread_sigmask(SIG_BLOCK, &set, NULL);
        if (s != 0)
            errc(EXIT_FAILURE, s, "pthread_sigmask");

        s = pthread_create(&thread, NULL, &sig_thread, &set);
        if (s != 0)
            errc(EXIT_FAILURE, s, "pthread_create");

        /* Main thread carries on to create other threads and/or do
           other work.  */

        pause();            /* Dummy pause so we can test program */
    }

انظر أيضًا
sigaction(2), sigpending(2), sigprocmask(2), pthread_attr_setsigmask_np(3), pthread_create(3), pthread_kill(3), sigsetops(3), pthreads(7), signal(7)

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

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

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