web-dev-qa-db-fra.com

Que renvoie WEXITSTATUS (statut)?

J'essaie de comprendre comment fonctionne WEXITSTATUS(status). J'ai rencontré un morceau de code où la valeur de retour de WEXITSTATUS(status) est ajoutée à une variable.

Voici l'extrait:

waitpid(-1, &status, 0);
counter += WEXITSTATUS(status);

Comment calculer la valeur de retour de WEXITSTATUS?

24
shaveenk

WEXITSTATUS(stat_val) est une macro (donc en fait elle ne fait pas " retour" quelque chose, mais "évalue" quelque chose).

Pour savoir comment cela fonctionne, vous pouvez le rechercher dans les en-têtes (qui devraient être #include D via <sys/wait.h> ) fournis avec le compilateur C que vous utilisez.

L'implémentation de ce marco peut différer d'un compilateur C à l'autre.

Veuillez noter que cette macro ne donne une valeur raisonnable que si la macro WIFEXITED(stat_val) vous a donné une valeur différente de 0.

Verbatim de spécification POSIX de waitpid() :

WEXITSTATUS ( stat_val)

Si la valeur de WIFEXITED ( stat_val) est différente de zéro, cette macro évalue les 8 bits de poids faible de l'argument d'état que le processus enfant a transmis à _ exit () ou exit (), ou la valeur renvoyée par le processus enfant main ().


La motivation derrière l'ajout du code de retour (s?) D'un programme particulier n'est connue que de l'auteur du code et de la documentation existante, espérons-le.

18
alk