rt_sigqueueinfo(2)

الاسم
rt_sigqueueinfo, rt_tgsigqueueinfo - إيداع إشارة وبيانات

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

موجز
#include <linux/signal.h>     /* تعريف ثوابت SI_* */
#include <sys/syscall.h>      /* تعريف ثوابت SYS_* */
#include <unistd.h>

int syscall(SYS_rt_sigqueueinfo, pid_t tgid,
            int sig, siginfo_t *info);
int syscall(SYS_rt_tgsigqueueinfo, pid_t tgid, pid_t tid,
            int sig, siginfo_t *info);

ملاحظة: لا توجد أغلفة glibc لاستدعاءات النظام هذه؛ انظر الملاحظات.

الوصف
استدعاءات النظام rt_sigqueueinfo() وrt_tgsigqueueinfo() هي الواجهات منخفضة المستوى المستخدمة لإرسال إشارة بالإضافة إلى بيانات إلى عملية أو خيط. يمكن لمستقبل الإشارة الحصول على البيانات المصاحبة بإنشاء معالج إشارة مع علامة SA_SIGINFO في sigaction(2).

استدعاءات النظام هذه ليست مخصصة للاستخدام المباشر من التطبيقات؛ إنها متاحة للسماح بتنفيذ sigqueue(3) وpthread_sigqueue(3).

يرسل استدعاء النظام rt_sigqueueinfo() الإشارة sig إلى مجموعة الخيوط ذات المعرف tgid. (مصطلح "مجموعة خيوط" مرادف لـ "عملية"، وtgid يتوافق مع معرف عملية UNIX التقليدي.) سيتم تسليم الإشارة إلى عضو عشوائي من مجموعة الخيوط (أي أحد الخيوط الذي لا يحجب الإشارة حاليًا).

تحدد الوسيطة info البيانات المصاحبة للإشارة. هذه الوسيطة هي مؤشر لبنية من النوع siginfo_t، الموصوفة في sigaction(2) (والمعرفة بتضمين <sigaction.h>). يجب على المستدعي تعيين الحقول التالية في هذه البنية:

si_code
    يجب أن يكون هذا أحد أكواد SI_* في ملف مصدر نواة لينكس include/asm-generic/siginfo.h. إذا تم إرسال الإشارة إلى أي عملية غير المستدعي نفسه، تنطبق القيود التالية:

    •   لا يمكن أن يكون الكود قيمة أكبر من أو تساوي الصفر. على وجه الخصوص، لا يمكن أن يكون SI_USER، الذي تستخدمه النواة للإشارة إلى إشارة أرسلها kill(2)، ولا يمكن أن يكون SI_KERNEL، الذي يستخدم للإشارة إلى إشارة مولدة من النواة.

    •   لا يمكن أن يكون الكود (منذ لينكس 2.6.39) SI_TKILL، الذي تستخدمه النواة للإشارة إلى إشارة أرسلت باستخدام tgkill(2).

si_pid
    يجب تعيين هذا إلى معرف عملية، عادةً معرف عملية المرسل.

si_uid
    يجب تعيين هذا إلى معرف مستخدم، عادةً معرف المستخدم الحقيقي للمرسل.

si_value
    يحتوي هذا الحقل على بيانات المستخدم المصاحبة للإشارة. لمزيد من المعلومات، انظر وصف الوسيطة الأخيرة (union sigval) لـ sigqueue(3).

داخليًا، تعين النواة الحقل si_signo إلى القيمة المحددة في sig، بحيث يمكن لمستقبل الإشارة أيضًا الحصول على رقم الإشارة عبر هذا الحقل.

استدعاء النظام rt_tgsigqueueinfo() يشبه rt_sigqueueinfo()، لكنه يرسل الإشارة والبيانات إلى الخيط الفردي المحدد بمزيج من tgid، معرف مجموعة خيوط، وtid، خيط في تلك المجموعة.

قيمة الإرجاع
عند النجاح، تعيد استدعاءات النظام هذه 0. عند الخطأ، تعيد -1 ويتم تعيين errno للإشارة إلى الخطأ.

الأخطاء

EAGAIN
    تم الوصول إلى حد الإشارات التي يمكن إيداعها. (انظر signal(7) لمزيد من المعلومات.)

EINVAL
    sig أو tgid أو tid غير صالح.

EPERM
    ليس لدى المستدعي صلاحية إرسال الإشارة إلى الهدف. للصلاحيات المطلوبة، انظر kill(2).

EPERM
    يحدد tgid عملية غير المستدعي وinfo->si_code غير صالح.

ESRCH
    rt_sigqueueinfo(): لم يتم العثور على مجموعة خيوط تطابق tgid.

rt_tgsigqueinfo(): لم يتم العثور على خيط يطابق tgid وtid.

المعايير
لينكس.

التاريخ

rt_sigqueueinfo()
    لينكس 2.2.

rt_tgsigqueueinfo()
    لينكس 2.6.31.

ملاحظات
نظرًا لأن استدعاءات النظام هذه ليست مخصصة للاستخدام من التطبيقات، فلا توجد دوال تغليف glibc؛ استخدم syscall(2) في الحالة غير المحتملة التي تريد فيها استدعاءها مباشرة.

كما هو الحال مع kill(2)، يمكن استخدام الإشارة الصفرية (0) للتحقق مما إذا كانت العملية أو الخيط المحدد موجودًا.

انظر أيضًا
kill(2)، pidfd_send_signal(2)، sigaction(2)، sigprocmask(2)، tgkill(2)، pthread_sigqueue(3)، sigqueue(3)، signal(7)

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

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

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