pthread_sigmask(3)

NUME
pthread_sigmask - examinează și schimbă masca semnalelor blocate

BIBLIOTECA
Biblioteca de fire de execuție POSIX (libpthread, -lpthread)

SINOPSIS
#include <signal.h>

int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);

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

pthread_sigmask():
    _POSIX_C_SOURCE >= 199506L || _XOPEN_SOURCE >= 500

DESCRIERE
Funcția pthread_sigmask() este la fel ca sigprocmask(2), cu diferența că utilizarea sa în programele cu mai multe fire este specificată în mod explicit de POSIX.1. Alte diferențe sunt notate în această pagină.

Pentru o descriere a argumentelor și a modului de funcționare a acestei funcții, a se vedea sigprocmask(2).

VALOAREA RETURNATĂ
În caz de succes, pthread_sigmask() returnează 0; în caz de eroare, returnează un număr de eroare.

ERORI-IEȘIRE
A se vedea sigprocmask(2).

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

STANDARDE
POSIX.1-2008.

ISTORIC
POSIX.1-2001.

NOTE
Un nou fir moștenește o copie a măștii de semnal a creatorului său.

Funcția glibc pthread_sigmask() ignoră în tăcere încercările de a bloca cele două semnale în timp real care sunt utilizate în mod intern de către implementarea firelor NPTL. A se vedea nptl(7) pentru detalii.

EXEMPLE
Programul de mai jos blochează unele semnale în firul principal și apoi creează un fir dedicat pentru a prelua aceste semnale prin sigwait(3). Următoarea sesiune shell demonstrează utilizarea sa:

    $ ./a.out &
    [1] 5423
    $ kill -QUIT %1
    Firul de gestionare a semnalelor a primit semnalul 3
    $ kill -USR1 %1
    Firul de gestionare a semnalelor a primit semnalul 10
    $ kill -TERM %1
    [1]+  Terminat              ./a.out

  Sursa programului
    #include <errno.h>
    #include <pthread.h>
    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    /* Funcții simple de gestionare a erorilor */

    #define handle_error_en(en, msg) \
            do { errno = en; perror(msg); exit(EXIT_FAILURE); } while (0)

    static void *
    sig_thread(void *arg)
    {
        sigset_t *set = arg;
        int s, sig;

        for (;;) {
            s = sigwait(set, &sig);
            if (s != 0)
                handle_error_en(s, "sigwait");
            printf("Firul de gestionare a semnalelor a primit semnalul %d\n", sig);
        }
    }

    int
    main(void)
    {
        pthread_t thread;
        sigset_t set;
        int s;

        /* Blochează SIGQUIT și SIGUSR1; alte fire create de main()
           vor moșteni o copie a măștii de semnal. */

        sigemptyset(&set);
        sigaddset(&set, SIGQUIT);
        sigaddset(&set, SIGUSR1);
        s = pthread_sigmask(SIG_BLOCK, &set, NULL);
        if (s != 0)
            handle_error_en(s, "pthread_sigmask");

        s = pthread_create(&thread, NULL, &sig_thread, &set);
        if (s != 0)
            handle_error_en(s, "pthread_create");

        /* Firul principal continuă să creeze alte fire și/sau să facă
           alte lucrări. */

        pause();            /* Pauză fictivă pentru a putea testa programul */
    }

CONSULTAȚI ȘI
sigaction(2), sigpending(2), sigprocmask(2), pthread_attr_setsigmask_np(3), pthread_create(3), pthread_kill(3), sigsetops(3), pthreads(7), 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.