sigqueue(3)

الاسم
sigqueue - إيداع إشارة وبيانات إلى عملية

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

موجز
#include <signal.h>

int sigqueue(pid_t pid, int sig, const union sigval value);

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

sigqueue():
    _POSIX_C_SOURCE >= 199309L

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

يُستخدم المعامل value لتحديد عنصر بيانات مصاحب (إما عدد صحيح أو قيمة مؤشر) ليُرسل مع الإشارة، وله النوع التالي:

    union sigval {
        int   sival_int;
        void *sival_ptr;
    };

إذا كانت العملية المستقبلة قد ثبتت معالجًا لهذه الإشارة باستخدام العلم SA_SIGINFO للدالة sigaction(2)، فيمكنها الحصول على هذه البيانات عبر حقل si_value من بنية siginfo_t الممررة كوسيط ثانٍ للمعالج. علاوة على ذلك، سيُضبط حقل si_code لتلك البنية على SI_QUEUE.

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

الأخطاء

EAGAIN
    وُصل إلى الحد الأقصى للإشارات التي يمكن وضعها في قائمة الانتظار. (انظر signal(7) لمزيد من المعلومات.)

EINVAL
    كان sig غير صالح.

EPERM
    لا تملك العملية الإذن لإرسال الإشارة إلى العملية المستقبلة. للأذونات المطلوبة، انظر kill(2).

ESRCH
    لا توجد عملية بمعرف PID يطابق pid.

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

الإصدارات

  الاختلافات بين مكتبة C والنواة
في لينكس، تُنفذ sigqueue() باستخدام استدعاء النظام rt_sigqueueinfo(2). يختلف استدعاء النظام في وسيطه الثالث، وهو بنية siginfo_t التي ستُزود لمعالج الإشارة للعملية المستقبلة أو تُرجع بواسطة استدعاء sigtimedwait(2) للعملية المستقبلة. داخل غلاف glibc للدالة sigqueue()، يُهيأ هذا الوسيط، uinfo، كالتالي:

    uinfo.si_signo = sig;       /* الوسيط المُمرَّر إلى sigqueue() */
    uinfo.si_code = SI_QUEUE;
    uinfo.si_pid = getpid();       /* مُعرِّف عملية المُرسِل */
    uinfo.si_uid = getuid();      /* المعرّف الفريد الحقيقي للمُرسِل */
    uinfo.si_value = val;         /* الوسيط المُمرَّر إلى sigqueue() */

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

التاريخ
لينكس 2.2. POSIX.1-2001.

ملاحظات
إذا أدت هذه الدالة إلى إرسال إشارة إلى العملية التي استدعتها، ولم تكن تلك الإشارة محجوبة بواسطة الخيط المستدعي، ولم تكن هناك خيوط أخرى راغبة في معالجة هذه الإشارة (إما بإلغاء حجبها، أو بانتظارها باستخدام sigwait(3))، فيجب عندئذٍ تسليم إشارة واحدة على الأقل إلى هذا الخيط قبل أن تعود هذه الدالة.

انظر أيضًا
kill(2), rt_sigqueueinfo(2), sigaction(2), signal(2), pthread_sigqueue(3), sigwait(3), signal(7)

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

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

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