Valeur retournée en programmation [Fermé]

Signaler
-
Messages postés
5345
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
5 juin 2020
-
Bonjour, s'il vous plaît ou se trouve les valeurs retournées certifiant qu'un programme a bien marché? Par exemple, en C on renvoit générealement un 0, si j'exécute un programme C ou se trouvera cette valeur? Merci d'avance

2 réponses

Messages postés
3644
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
881
  • Sous cmd.exe (Window$):

https://devblogs.microsoft.com/oldnewthing/?p=20743
https://ss64.com/nt/errorlevel.html
  • Sous bash

La variable $? fournit le code d'erreur de la commande précédente.
Messages postés
5345
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
5 juin 2020
877
C on renvoit générealement un 0, si j'exécute un programme C ou se trouvera cette valeur?

Le standard du C prévoit seulement que :

- ces valeurs sont des valeurs de statut de fin destinées à l'environnement d'exécution, qui peut, on non, faire usage de ces informations,
- que si la valeur de retour est 0 ou EXIT_SUCCESS, c'est une information de succès qui est donnée,
- que si c'est EXIT_FAILURE, c'est une information d'erreur,
- et que toute autre valeur peut éventuellement avoir une signification en fonction de l'environnement d'exécution.

Sauf environnement particulier (embarqué), dès lors qu'un programme est lancé dans un système d'exploitation, il faut intégrer cette valeur de retour pour faire du code conforme au standard.

Dans sa réponse, jisisv a expliqué comment récupérer ce code au moyen du shell cmd ou bash, et cela marchera si le programme est lancé, et l'interrogation des variables d'environnement faite, à partir du même shell. Donc si : (1) tu ouvres un shell, (2) tu lances le programme, (3) tu vérifies la variable d'environnement.

A partir de tes programmes C, si tu lances d'autres programmes et que tu veux récupérer la valeur de retour, tu devras faire autrement, et également différemment selon les systèmes pour être sûr de récupérer la bonne information.

Sous Windows, c'est avec l'exécution du processus passant par CreateProcess() que tu vas pouvoir récupérer l'info avec GetExitCodeProcess()

exemples :
https://docs.microsoft.com/en-us/windows/win32/procthread/creating-processes?redirectedfrom=MSDN
https://www.codeproject.com/tips/333559/createprocess-and-wait-for-result

Sous Linux et systèmes de type Unix (POSIX), un fork avec un waidpid suffit

https://linux.die.net/man/2/waitpid

(la page de manuel donne un exemple)

Utiliser system() ne te permettra pas nécessairement de récupérer une information fiable, car le standard ne définit rien d'obligatoire pour la valeur retournée par cette commande, qui est à l'appréciation de l'implémentation de C et du système.


Dal