sigqueue(3) Library Functions Manual sigqueue(3)

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

Biblioteca C standard (libc, -lc)

#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

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.

Î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.

A fost atinsă limita de semnale care pot fi puse în coadă. A se vedea signal(7) pentru informații suplimentare.
sig nu a fost valid.
Procesul nu are permisiunea de a trimite semnalul către procesul receptor. Pentru permisiunile necesare, a se vedea kill(2).
Niciun proces nu are un PID care să corespundă cu pid.

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

Î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() */

POSIX.1-2008.

Linux 2.2. POSIX.1-2001.

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.

kill(2), rt_sigqueueinfo(2), sigaction(2), signal(2), pthread_sigqueue(3), sigwait(3), signal(7)

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 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.

31 octombrie 2023 Pagini de manual de Linux 6.06