sigvec(3)

الاسم
sigvec، sigblock، sigsetmask، siggetmask، sigmask - واجهة برمجة تطبيقات الإشارات لنظام BSD

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

موجز
#include <signal.h>

[[deprecated]] int sigvec(int sig, const struct sigvec *vec,
                          struct sigvec *ovec);

[[deprecated]] int sigmask(int signum);

[[deprecated]] int sigblock(int mask);
[[deprecated]] int sigsetmask(int mask);
[[deprecated]] int siggetmask(void);

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

كافة الدوال الموضحة أعلاه:
    منذ glibc 2.19:
        _DEFAULT_SOURCE
    glibc 2.19 وما قبله:
        _BSD_SOURCE

الوصف
تُوفَّر هذه الدوال في glibc كواجهة توافق للبرامج التي تستخدم واجهة برمجة تطبيقات الإشارات التاريخية لنظام BSD. هذه الواجهة قديمة: يجب على التطبيقات الجديدة استخدام واجهة برمجة تطبيقات الإشارات لنظام POSIX (sigaction(2)، sigprocmask(2)، إلخ).

تضبط الدالة sigvec() و/أو تحصل على معالجة الإشارة sig (مثل sigaction(2) في POSIX). إذا لم يكن vec فارغًا، فإنه يشير إلى بنية sigvec التي تُعرِّف المعالجة الجديدة لـ sig. إذا لم يكن ovec فارغًا، فإنه يشير إلى بنية sigvec تُستخدم لإرجاع المعالجة السابقة لـ sig. للحصول على المعالجة الحالية لـ sig دون تغييرها، يُحدد NULL لـ vec ومؤشر غير فارغ لـ ovec.

لا يمكن تغيير الإجراءات المقررة لـ SIGKILL و SIGSTOP.

بنية sigvec لها الشكل التالي:

    struct sigvec {
        void (*sv_handler)(int); /* معالجة الإشارة */
        int     sv_mask;         /* الإشارات المراد حظرها في المعالج */
        int     sv_flags;         /* العلامات */
    };

يُحدد الحقل sv_handler معالجة الإشارة، ويكون إما: عنوان دالة معالج الإشارة؛ أو SIG_DFL، مما يعني تطبيق المعالجة المبدئية للإشارة؛ أو SIG_IGN، مما يعني تجاهل الإشارة.

إذا حدد sv_handler عنوان معالج إشارة، فإن sv_mask يُحدد قناعًا من الإشارات المطلوب حظرها أثناء تنفيذ المعالج. بالإضافة إلى ذلك، تُحظر أيضًا الإشارة التي استُدعي المعالج من أجلها. تُتجاهل محاولات حظر SIGKILL أو SIGSTOP بصمت.

إذا حدد sv_handler عنوان معالج إشارة، فإن الحقل sv_flags يُحدد أعلامًا تتحكم فيما يحدث عند استدعاء المعالج. قد يحتوي هذا الحقل على صفر أو أكثر من الأعلام التالية:

SV_INTERRUPT
    إذا قاطع معالج الإشارة استدعاء نظام حاجز، فعند العودة من المعالج لا يُعاد تشغيل استدعاء النظام: بل يفشل مع الخطأ EINTR. إذا لم يُحدد هذا العلم، فتُعاد تشغيل استدعاءات النظام مبدئيًا.

SV_RESETHAND
    إعادة تعيين معالجة الإشارة إلى المبدئي قبل استدعاء معالج الإشارة. إذا لم يُحدد هذا العلم، يبقى المعالج مُثبتًا حتى يُزال صراحةً باستدعاء لاحق لـ sigvec() أو حتى تنفذ العملية execve(2).

SV_ONSTACK
    معالجة الإشارة على مكدس الإشارات البديل (المُثبت تاريخيًا تحت BSD باستخدام الدالة المهملة sigstack()؛ البديل في POSIX هو sigaltstack(2)).

تنشئ الكلية sigmask() وتُعيد "قناع إشارة" لـ signum. على سبيل المثال، يمكننا تهيئة الحقل vec.sv_mask المُعطى لـ sigvec() باستخدام كود مثل التالي:

    vec.sv_mask = sigmask(SIGQUIT) | sigmask(SIGABRT);
                     /* حظر إشارتي SIGQUIT وSIGABRT أثناء تنفيذ المعالج
                          */

تُضيف الدالة sigblock() الإشارات في mask إلى قناع إشارات العملية (مثل sigprocmask(SIG_BLOCK) في POSIX)، وتُعيد قناع الإشارات السابق للعملية. تُتجاهل محاولات حظر SIGKILL أو SIGSTOP بصمت.

تضبط الدالة sigsetmask() قناع الإشارة للعملية إلى القيمة المعطاة في mask (مثل POSIX sigprocmask(SIG_SETMASK))، وتُعيد قناع الإشارة السابق للعملية.

تُعيد الدالة siggetmask() قناع الإشارة الحالي للعملية. هذه الاستدعاء مكافئ لـ sigblock(0).

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

تُعيد الدالتان sigblock() و sigsetmask() قناع الإشارة السابق.

تُعيد الماكرو sigmask() قناع الإشارة لـ signum.

الأخطاء
انظر الأخطاء تحت sigaction(2) و sigprocmask(2).

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

المعايير
لا شيء.

التاريخ

sigvec()
sigblock()
sigmask()
sigsetmask()
    4.3BSD.

siggetmask()
    أصل غير واضح.

sigvec()
    أُزيل في glibc 2.21.

ملاحظات
في 4.3BSD، وفرت الدالة signal() دلالات موثوقة (كما عند استدعاء sigvec() مع vec.sv_mask مساوٍ لـ 0). في System V، توفر signal() دلالات غير موثوقة. يترك POSIX.1 هذه الجوانب من signal() غير محددة. انظر signal(2) لمزيد من التفاصيل.

من أجل انتظار إشارة، وفر كل من BSD و System V دالة تسمى sigpause(3)، ولكن هذه الدالة لها معطيات مختلفة في النظامين. راجع sigpause(3) للتفاصيل.

انظر أيضًا
kill(2)، pause(2)، sigaction(2)، signal(2)، sigprocmask(2)، raise(3)، sigpause(3)، sigset(3)، signal(7)

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

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

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