sigprocmask(2)

الاسم
sigprocmask, rt_sigprocmask - فحص وتغيير الإشارات المحجوبة

المكتبة
مكتبة سي المعيارية (libc، -lc)

موجز
#include <signal.h>

/* Prototype for the glibc wrapper function */
int sigprocmask(int how, const sigset_t *_Nullable restrict set,
                           sigset_t *_Nullable restrict oldset);

#include <signal.h>           /* Definition of SIG_* constants */
#include <sys/syscall.h>      /* Definition of SYS_* constants */
#include <unistd.h>

/* Prototype for the underlying system call */
int syscall(SYS_rt_sigprocmask, int how,
                           const kernel_sigset_t *_Nullable set,
                           kernel_sigset_t *_Nullable oldset,
                           size_t sigsetsize);

/* Prototype for the legacy system call */
[[deprecated]] int syscall(SYS_sigprocmask, int how,
                           const old_kernel_sigset_t *_Nullable set,
                           old_kernel_sigset_t *_Nullable oldset);

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

sigprocmask():
    _POSIX_C_SOURCE

الوصف
تُستخدم sigprocmask() لجلب و/أو تغيير قناع الإشارات للخيط المستدعي. قناع الإشارات هو مجموعة الإشارات التي يتم حظر تسليمها حاليًا للمستدعي (انظر أيضًا signal(7) لمزيد من التفاصيل).

يعتمد سلوك الاستدعاء على قيمة how، كما يلي.

SIG_BLOCK
    مجموعة الإشارات المحجوبة هي اتحاد المجموعة الحالية والوسيطة set.

SIG_UNBLOCK
    تتم إزالة الإشارات في set من المجموعة الحالية للإشارات المحجوبة. يُسمح بمحاولة إلغاء حظر إشارة غير محجوبة.

SIG_SETMASK
    يتم تعيين مجموعة الإشارات المحجوبة إلى الوسيطة set.

إذا كانت oldset غير NULL، يتم تخزين القيمة السابقة لقناع الإشارات في oldset.

إذا كانت set NULL، فإن قناع الإشارات يبقى دون تغيير (أي يتم تجاهل how)، ولكن يتم إرجاع القيمة الحالية لقناع الإشارات في oldset (إذا لم تكن NULL).

يتم وصف مجموعة من الدوال لتعديل وفحص متغيرات من النوع sigset_t ("مجموعات الإشارات") في sigsetops(3).

استخدام sigprocmask() غير محدد في عملية متعددة الخيوط؛ انظر pthread_sigmask(3).

قيمة الإرجاع
تُرجع sigprocmask() 0 عند النجاح. عند الفشل، تُرجع -1 ويتم تعيين errno للإشارة إلى الخطأ.

الأخطاء

EFAULT
    تشير الوسيطة set أو oldset إلى خارج مساحة العنوان المخصصة للعملية.

EINVAL
    إما أن القيمة المحددة في how غير صالحة أو أن النواة لا تدعم الحجم المُمرر في sigsetsize.

الإصدارات

  الاختلافات بين مكتبة C والنواة
يختلف تعريف النواة لـ sigset_t في الحجم عن ذلك المستخدم من قبل مكتبة C. في صفحة الدليل هذه، يُشار إلى الأول باسم kernel_sigset_t (ومع ذلك يُسمى sigset_t في شيفرات النواة).

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

كان استدعاء نظام Linux الأصلي يُسمى sigprocmask(). ومع ذلك، مع إضافة إشارات الوقت الفعلي في Linux 2.2، لم يعد النوع ذو الحجم الثابت 32 بت sigset_t (المشار إليه باسم old_kernel_sigset_t في صفحة الدليل هذه) المدعوم من قبل ذلك الاستدعاء مناسبًا للغرض. وبالتالي، تمت إضافة استدعاء نظام جديد، rt_sigprocmask()، لدعم نوع sigset_t موسع (المشار إليه باسم kernel_sigset_t في صفحة الدليل هذه). يأخذ استدعاء النظام الجديد وسيطة رابعة، size_t sigsetsize، والتي تحدد الحجم بالبايت لمجموعات الإشارات في set و oldset. هذه الوسيطة مطلوبة حاليًا أن تكون ذات قيمة ثابتة خاصة بالمعمارية (تساوي sizeof(kernel_sigset_t)).

تخفي دالة الغلاف sigprocmask() في glibc هذه التفاصيل عنا، وتستدعي بشفافية rt_sigprocmask() عندما توفرها النواة.

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

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

ملاحظات
لا يمكن حظر SIGKILL أو SIGSTOP. يتم تجاهل محاولات القيام بذلك بصمت.

كل خيط من خيوط العملية له قناع الإشارات الخاص به.

يرث الابن المنشأ عبر fork(2) نسخة من قناع إشارات والده؛ ويُحافَظ على قناع الإشارات عبر عملية execve(2).

إذا تم توليد SIGBUS أو SIGFPE أو SIGILL أو SIGSEGV أثناء حظرها، تكون النتيجة غير محددة، ما لم يتم توليد الإشارة بواسطة kill(2) أو sigqueue(3) أو raise(3).

انظر sigsetops(3) للحصول على تفاصيل حول معالجة مجموعات الإشارات.

لاحظ أنه من المسموح (وإن لم يكن مفيدًا جدًا) تحديد كل من set و oldset كـ NULL.

انظر أيضًا
kill(2), pause(2), sigaction(2), signal(2), sigpending(2), sigsuspend(2), pthread_sigmask(3), sigqueue(3), sigsetops(3), signal(7)

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

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

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