sigsuspend(2)

الاسم
sigsuspend, rt_sigsuspend - انتظار إشارة

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

موجز
#include <signal.h>

int sigsuspend(const sigset_t *mask);

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

sigsuspend():
    _POSIX_C_SOURCE

الوصف
sigsuspend() تستبدل مؤقتًا قناع الإشارة للخيط المستدعي بالقناع المعطى بواسطة mask ثم تعلق الخيط حتى تسليم إشارة يكون إجراءها استدعاء معالج إشارة أو إنهاء عملية.

إذا أنهت الإشارة العملية، فإن sigsuspend() لا تعود. إذا تم التقاط الإشارة، فإن sigsuspend() تعود بعد عودة معالج الإشارة، ويتم استعادة قناع الإشارة إلى الحالة قبل استدعاء sigsuspend().

لا يمكن حظر SIGKILL أو SIGSTOP؛ تحديد هذه الإشارات في mask ليس له تأثير على قناع إشارة الخيط.

قيمة الإرجاع
sigsuspend() تعود دائمًا بـ -1، مع تعيين errno للإشارة إلى الخطأ (عادةً EINTR).

الأخطاء

EFAULT
    يشير mask إلى ذاكرة ليست جزءًا صالحًا من مساحة عنوان العملية.

EINTR
    تمت مقاطعة الاستدعاء بواسطة إشارة؛ signal(7).

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

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

  الاختلافات بين مكتبة C والنواة
كان استدعاء النظام الأصلي في لينكس يُسمى sigsuspend(). ومع ذلك، مع إضافة الإشارات في الوقت الحقيقي في لينكس 2.2، لم يعد النوع ذو الحجم الثابت 32 بت sigset_t المدعوم من قبل ذلك الاستدعاء مناسبًا للغرض. وبالتالي، تمت إضافة استدعاء نظام جديد، rt_sigsuspend()، لدعم نوع sigset_t موسع. يأخذ استدعاء النظام الجديد وسيطة ثانية، size_t sigsetsize، والتي تحدد الحجم بالبايت لمجموعة الإشارات في mask. هذه الوسيطة مطلوبة حاليًا أن تكون بقيمة sizeof(sigset_t) (أو ينتج الخطأ EINVAL). تخفي دالة الغلاف glibc sigsuspend() هذه التفاصيل عنا، وتستدعي بشفافية rt_sigsuspend() عندما يوفر النواة ذلك.

ملاحظات
عادةً، يُستخدم sigsuspend() بالتزامن مع sigprocmask(2) لمنع تسليم إشارة أثناء تنفيذ قسم كود حرج. يقوم المستدعي أولاً بحظر الإشارات باستخدام sigprocmask(2). عند اكتمال الكود الحرج، ينتظر المستدعي بعد ذلك الإشارات باستدعاء sigsuspend() مع قناع الإشارة الذي تم إرجاعه بواسطة sigprocmask(2) (في وسيطة oldset).

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

انظر أيضًا
kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2), sigwaitinfo(2), sigsetops(3), sigwait(3), signal(7)

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

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

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