sigwaitinfo(2) System Calls Manual sigwaitinfo(2) NUME sigwaitinfo, sigtimedwait, rt_sigtimedwait - ateapta in mod sincron pentru semnalele din coada de ateptare BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include int sigwaitinfo(const sigset_t *restrict set, siginfo_t *_Nullable restrict info); int sigtimedwait(const sigset_t *restrict set, siginfo_t *_Nullable restrict info, const struct timespec *restrict timeout); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): sigwaitinfo(), sigtimedwait(): _POSIX_C_SOURCE >= 199309L DESCRIERE sigwaitinfo() suspenda execuia firului apelant pana cand unul dintre semnalele din set este in ateptare; (daca unul dintre semnalele din set este deja in ateptare pentru firul apelant, sigwaitinfo() returneaza imediat). sigwaitinfo() elimina semnalul din setul de semnale in ateptare i returneaza numarul semnalului ca rezultat al funciei sale. Daca argumentul siginfo nu este NULL, atunci memoria tampon la care acesta indica este utilizata pentru a returna o structura de tip siginfo_t (a se vedea sigaction(2)) care conine informaii despre semnal. In cazul in care mai multe semnale din set sunt in ateptare pentru apelant, semnalul care este recuperat de sigwaitinfo() este determinat in conformitate cu regulile obinuite de ordonare; a se vedea signal(7) pentru mai multe detalii. sigtimedwait() funcioneaza exact in acelai mod ca i sigwaitinfo(), cu excepia faptului ca are un argument suplimentar, timeout, care specifica intervalul pentru care firul este suspendat in ateptarea unui semnal; (acest interval va fi rotunjit la granularitatea (gradul de finee al) ceasului de sistem, iar intarzierile de programare ale nucleului inseamna ca intervalul poate fi depait cu o mica cantitate). Acest argument este o structura timespec(3). In cazul in care ambele campuri ale acestei structuri sunt specificate ca fiind 0, se efectueaza un sondaj: sigtimedwait() revine imediat, fie cu informaii despre un semnal care era in ateptare pentru apelant, fie cu o eroare daca niciunul dintre semnalele din set nu era in ateptare. VALOAREA RETURNATA In caz de succes, atat sigwaitinfo(), cat i sigtimedwait() returneaza un numar de semnal (adica o valoare mai mare decat zero). In caz de eec, ambele apeluri returneaza -1, cu errno configurata pentru a indica eroarea. ERORI-IEIRE EAGAIN Niciun semnal din set nu a devenit in ateptare in perioada timeout specificata la sigtimedwait(). EINTR Ateptarea a fost intrerupta de un gestionar de semnal; a se vedea signal(7); (acest gestionar era pentru un alt semnal decat unul dintre cele din set). EINVAL timeout nu a fost valid. VERSIUNI Diferene intre biblioteca C i nucleu In Linux, sigwaitinfo() este o funcie de biblioteca implementata pe langa sigtimedwait(). Funciile glibc pentru sigwaitinfo() i sigtimedwait() ignora in tacere incercarile de a atepta cele doua semnale in timp real care sunt utilizate in mod intern de catre implementarea de fire de execuie ,,NPTL threading". A se vedea nptl(7) pentru detalii. Apelul de sistem original din Linux a fost numit sigtimedwait(). Cu toate acestea, odata cu adaugarea semnalelor in timp real in Linux 2.2, tipul de dimensiune fixa, pe 32 de bii sigset_t acceptat de acest apel de sistem nu mai era potrivit scopului. In consecina, a fost adaugat un nou apel de sistem, rt_sigtimedwait(), pentru a suporta un tip sigset_t marit. Noul apel de sistem primete un al patrulea argument, size_t sigsetsize, care specifica dimensiunea in octei a setului de semnale din set. In prezent, acest argument trebuie sa aiba valoarea sizeof(sigset_t) (in caz contrar, apare eroarea EINVAL). Funcia de invaluire glibc sigtimedwait() ne ascunde aceste detalii, apeland in mod transparent rt_sigtimedwait() atunci cand nucleul o furnizeaza. STANDARDE POSIX.1-2008. ISTORIC POSIX.1-2001. NOTE In mod normal, programul apelant blocheaza semnalele din set printr-un apel anterior la sigprocmask(2) (astfel incat dispoziia implicita pentru aceste semnale sa nu apara daca acestea devin in ateptare intre apelurile succesive la sigwaitinfo() sau sigtimedwait()) i nu stabilete gestionari pentru aceste semnale. Intr-un program cu mai multe fire de execuie, semnalul trebuie blocat in toate firele de execuie, pentru a preveni ca semnalul sa fie tratat in conformitate cu dispoziia sa implicita intr-un alt fir de execuie decat cel care apeleaza sigwaitinfo() sau sigtimedwait()). Setul de semnale care este in ateptare pentru un anumit fir de execuie este uniunea dintre setul de semnale care este in ateptare in mod specific pentru acel fir de execuie i setul de semnale care este in ateptare pentru intregul proces (a se vedea signal(7)). Incercarile de a atepta SIGKILL i SIGSTOP sunt ignorate in tacere. In cazul in care mai multe fire ale unui proces sunt blocate in ateptarea aceluiai semnal (semnale) in sigwaitinfo() sau sigtimedwait(), atunci exact unul dintre fire va primi efectiv semnalul daca acesta devine in ateptare pentru intregul proces; care dintre fire primete semnalul este nedeterminat. sigwaitinfo() sau sigtimedwait(), nu pot fi utilizate pentru a primi semnale care sunt generate in mod sincron, cum ar fi semnalul SIGSEGV care rezulta din accesarea unei adrese de memorie invalida sau semnalul SIGFPE care rezulta dintr-o eroare aritmetica. Astfel de semnale pot fi recepionate numai prin intermediul unui gestionar de semnal. POSIX lasa nespecificata semnificaia unei valori NULL pentru argumentul timeout din sigtimedwait(), permiand posibilitatea ca acest lucru sa aiba aceeai semnificaie ca un apel la sigwaitinfo() i, intr-adevar, acest lucru este ceea ce se face sub Linux. CONSULTAI I kill(2), sigaction(2), signal(2), signalfd(2), sigpending(2), sigprocmask(2), sigqueue(3), sigsetops(3), sigwait(3), timespec(3), signal(7), time(7) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.9.1 2 mai 2024 sigwaitinfo(2)