sigqueue(3)

NUME
sigqueue - pune la coadă un semnal și date pentru un proces

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <signal.h>

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

    Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

sigqueue():
    _POSIX_C_SOURCE >= 199309L

DESCRIERE
sigqueue() trimite semnalul specificat în sig către procesul al cărui PID este dat în pid. Permisiunile necesare pentru a trimite un semnal sunt aceleași ca pentru kill(2). Ca și în cazul kill(2), semnalul nul (0) poate fi utilizat pentru a verifica dacă există un proces cu un PID dat.

Argumentul value este utilizat pentru a specifica un element de date însoțitor (fie un număr întreg, fie o valoare de indicator) care urmează să fie trimis împreună cu semnalul și are următorul tip:

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

În cazul în care procesul de recepție a instalat un gestionar pentru acest semnal utilizând fanionul SA_SIGINFO la sigaction(2), atunci acesta poate obține aceste date prin intermediul câmpului si_value din structura siginfo_t transmisă ca al doilea argument al gestionarului. În plus, câmpul si_code al acestei structuri va fi stabilit la SI_QUEUE.

VALOAREA RETURNATĂ
În caz de succes, sigqueue() returnează 0, indicând că semnalul a fost pus cu succes în coadă către procesul receptor. În caz contrar, se returnează -1, iar errno este configurată pentru a indica eroarea.

ERORI-IEȘIRE

EAGAIN
    A fost atinsă limita de semnale care pot fi puse în coadă. A se vedea signal(7) pentru informații suplimentare.

EINVAL
    sig nu a fost valid.

EPERM
    Procesul nu are permisiunea de a trimite semnalul către procesul receptor. Pentru permisiunile necesare, a se vedea kill(2).

ESRCH
    Niciun proces nu are un PID care să corespundă cu pid.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
sigqueue() | Siguranța firelor | MT-Safe

VERSIUNI

  Diferențe între biblioteca C și nucleu
În Linux, sigqueue() este implementat utilizând apelul de sistem rt_sigqueueinfo(2). Apelul de sistem diferă prin cel de-al treilea argument, care este structura siginfo_t care va fi furnizată gestionarului de semnal al procesului receptor sau returnată de apelul sigtimedwait(2) al procesului receptor. În interiorul funcției învăluitoare sigqueue() a glibc, acest argument, uinfo, este inițializat după cum urmează:

    uinfo.si_signo = sig;      /* Argument furnizat pentru sigqueue() */
    uinfo.si_code = SI_QUEUE;
    uinfo.si_pid = getpid();   /* ID-ul de proces al expeditorului */
    uinfo.si_uid = getuid();   /* UID-ul real al expeditorului */
    uinfo.si_value = val;      /* Argument furnizat pentru sigqueue() */

STANDARDE
POSIX.1-2008.

ISTORIC
Linux 2.2. POSIX.1-2001.

NOTE
Dacă această funcție are ca rezultat trimiterea unui semnal către procesul care a invocat-o, iar acest semnal nu a fost blocat de firul apelant și nici un alt fir nu a fost dispus să gestioneze acest semnal (fie prin deblocarea lui, fie prin așteptarea lui folosind sigwait(3)), atunci cel puțin un semnal trebuie să fie transmis acestui fir înainte ca această funcție să returneze.

CONSULTAȚI ȘI
kill(2), rt_sigqueueinfo(2), sigaction(2), signal(2), pthread_sigqueue(3), sigwait(3), signal(7)

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.