Question

Je n'ai pas complètement compris comment l'utiliser sigprocmask().En particulier, comment le set et oldset et son travail de syntaxe et comment les utiliser.

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

Veuillez expliquer avec un exemple, pour bloquer, dites SIGUSR1 pendant quelques secondes, puis débloquez et gérez-le.­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

Était-ce utile?

La solution

L'idée est que vous fournissiez un masque set, en fait une liste de signaux.Le how l'argument dit ce que vous devriez faire avec le masque dans set.

Vous pouvez soit utiliser SIG_BLOCK pour bloquer les signaux dans le set liste, ou SIG_UNBLOCK pour les débloquer.Aucun de ces éléments ne modifie les signaux qui ne sont pas définis dans la liste. SIG_SETMASK bloque les signaux de la liste et débloque ceux qui ne sont pas définis dans la liste.

Par exemple, supposons que l'ancienne liste de blocage était {SIGSEGV, SIGSUSP} et tu appelles sigprocmask avec ces arguments :

sigset_t x;
sigemptyset (&x);
sigaddset(&x, SIGUSR1);
sigprocmask(SIG_BLOCK, &x, NULL)

La nouvelle liste de blocage sera désormais {SIGSEGV, SIGSUSP, SIGUSR1}.

Si tu appelles sigprocmask avec ces arguments maintenant:

sigprocmask(SIG_UNBLOCK, &x, NULL)

La nouvelle liste de blocage redeviendra {SIGSEGV, SIGSUSP}.

Si tu appelles sigprocmask avec ces arguments maintenant:

sigprocmask(SIG_SETMASK, &x, NULL)

La nouvelle liste de blocage sera désormais définie sur {SIGUSR1}.

Le oldset L'argument vous indique quelle était la liste de blocage précédente.Si nous avons cette déclaration :

sigset_t y;

et nous appelons le code des exemples précédents comme ceci :

    sigprocmask(SIG_BLOCK, &x, &y)

maintenant nous avons:

y == {SIGSEGV, SIGSUSP}

Si nous faisons maintenant :

    sigprocmask(SIG_UNBLOCK, &x, &y)

nous aurons

y == {SIGSEGV, SIGSUSP, SIGUSR1}

et si nous le faisons :

    sigprocmask(SIG_SET, &x, &y)

nous obtiendrons ceci :

y == {SIGSEGV, SIGSUSP}

car c'est la valeur précédente de l'ensemble de blocage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top