code retour main() - C - Programmation
Marsh Posté le 16-04-2009 à 14:01:42
Ca dépend du système et du shell. D'habitude, tu récupères 8bits, signé ou pas, selon. Faut pas trop s'appuyer dessus pour des grosses valeurs.
Marsh Posté le 16-04-2009 à 14:18:39
Pour récupérer plus d'informations, une solution consiste à écrire dans un fichier, ou vers la sortie standard, ce qui est assez pratique si on utilise un pipe ensuite.
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
/* Ecrire sur la sortie standard
(pas la peine d'ouvrir ou de fermer "stdout" ) */
fprintf(stdout, "12345" );
return(0);
}
Marsh Posté le 16-04-2009 à 14:32:58
xilebo a écrit : Malheureusement, je viens de découvrir que le code retour d'un exécutable linux ne peut pas dépasser 255. |
la man page POSIX de exit() contient
Citation : The value of status may be 0, EXIT_SUCCESS, EXIT_FAILURE, or any other value, though only the least significant 8 bits (that is, status & 0377) shall be available to a waiting parent process. |
Marsh Posté le 16-04-2009 à 14:35:55
très bien. Je n'ai pas pensé à regarder la page man de la fonction exit().
Je vais donc utiliser une autre méthode, comme celle qu'indique olivthill, bien que je trouve ça dangereux.
Merci des infos
Marsh Posté le 16-04-2009 à 15:04:28
xilebo a écrit : Bonjour, Je souhaite écrire un petit programme me permettant de me relire une valeur qui peut être comprise entre 0 et 1FFF pour ensuite l'utiliser dans un shell-script. Malheureusement, je viens de découvrir que le code retour d'un exécutable linux ne peut pas dépasser 255. Je suis d'autant plus étonné que le type de retour de main est un int. |
256 valeurs pour un shell c'est largement suffisant pour prendre des décisions (dans la pratique, c'est 0(OK) ou 1(ERREUR) ). Si tu as besoin de retourner une valeur précise (texte), utilise un fichier texte. Il pourra alors être relu par l'application qui en a besoin.
Tu peux aussi sortir la valeur par stdout et la récupérer directement par stdin d'une autre application en utilisant le 'pipe' (généralement '|' dans les systèmes courants...)
Usage classique sous MS-DOS :
type file.txt | more |
Marsh Posté le 16-04-2009 à 21:31:07
Emmanuel Delahaye a écrit :
|
Je trouvais ça dommage de devoir créer un fichier temporaire pour récupérer une valeur temporaire. J'ai donc utilisé la sortie standard, et blindé mon script au cas où je n'ai pas le format de valeur attendu.
Marsh Posté le 16-04-2009 à 13:46:11
Bonjour,
Je souhaite écrire un petit programme me permettant de me relire une valeur qui peut être comprise entre 0 et 1FFF pour ensuite l'utiliser dans un shell-script.
Malheureusement, je viens de découvrir que le code retour d'un exécutable linux ne peut pas dépasser 255. Je suis d'autant plus étonné que le type de retour de main est un int.
me donne :
Pour quelle raison cette limitation ? Et y-a-t-il un moyen de l'outrepasser ?
Merci