J'ai vu la ligne de code suivante ici.

puts("sigprocmask(SIG_UNBLOCK, ~[], []) = 0");

Je ne comprends pas, que fait le script de tableau vide ([])?

Aussi, quel est le but de ~[] en C?

-4
msc 15 nov. 2017 à 09:51

4 réponses

Meilleure réponse

Le programme lié semble consigner ses actions dans un langage semi-formalisé inventé. Ce "langage" de journalisation n'est pas C. Le littéral de chaîne dans votre question est juste une ligne dans ce "langage" inventé, que le programme enverra à la sortie standard. Par conséquent, le bit ~[] n'a rien à voir avec C et n'a pas de signification particulière dans le contexte C.

Après chaque appel (supposé réussi) k_sigprocmask, appelez les journaux de programme qui appellent en envoyant de telles chaînes à la sortie.

Par exemple, lorsque le programme affiche sigprocmask(SIG_SETMASK, [], NULL) = <something>, il dit simplement à l'utilisateur "Je viens d'appeler la fonction k_sigprocmask avec le premier argument SIG_SETMASK, un ensemble de bits vide comme deuxième argument et un pointeur nul comme le troisième argument. Et j'ai reçu <something> comme code d'erreur. "

[] représente un masque de bits tous bits à zéro (ensemble vide). [HUP INT QUIT] représente un masque avec uniquement les bits HUP, INT et QUIT définis sur 1. ~[HUP] représente un masque avec tous les bits mis à 1 sauf { {X6}} bit.

~[] représente une valeur d'argument étrange new_set - 1, qui n'a pas immédiatement de sens pour moi (puisque new_set est un pointeur). Je suppose qu'il en résulte en quelque sorte un ensemble avec tous les éléments inclus (tous les bits sont définis sur 1).

3
AnT 15 nov. 2017 à 07:10

La syntaxe ~ [] fait partie de l'expression de tableau JavaScript bit à bit PAS vide. C n'a aucun opérateur de ce type.

0
krish___na 15 nov. 2017 à 07:00

La référence dit:

En revanche, les ensembles de bits sont également indiqués entre crochets mais les éléments d'ensemble ne sont séparés que par un espace. Voici la coquille préparation à l'exécution d'une commande externe:

sigprocmask(SIG_BLOCK, [CHLD TTOU], []) = 0

Ici le deuxième argument est un ensemble de bits de deux signaux, SIGCHLD et SIGTTOU. Dans certains cas, l'ensemble de bits est si plein que l'impression les éléments non définis ont plus de valeur . Dans ce cas, l'ensemble de bits est préfixé par un tilde comme celui-ci:

sigprocmask(SIG_UNBLOCK, ~[], NULL) = 0

Ici, le deuxième argument représente l'ensemble complet de tous les signaux.

1
msc 15 nov. 2017 à 08:39

Il ne fait rien .

puts("sigprocmask(SIG_UNBLOCK, ~[], []) = 0");
     ^                                     ^

C'est une chaîne littérale. Cette ligne est probablement utilisée pour générer un programme dans un autre langage, qui du moins n'est pas C.

3
iBug 15 nov. 2017 à 06:54
47301092