Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3033 connectés 

  FORUM HardWare.fr
  Programmation
  C

  code retour main()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

code retour main()

n°1873777
xilebo
noone
Posté le 16-04-2009 à 13:46:11  profilanswer
 

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.
 

Code :
  1. int main() {
  2. return 257;
  3. }


 
me donne :  

Code :
  1. # echo $?
  2. # 1


 
Pour quelle raison cette limitation ?  Et y-a-t-il un moyen de l'outrepasser ?
 
Merci :jap:

mood
Publicité
Posté le 16-04-2009 à 13:46:11  profilanswer
 

n°1873783
Taz
bisounours-codeur
Posté le 16-04-2009 à 14:01:42  profilanswer
 

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.

n°1873800
olivthill
Posté le 16-04-2009 à 14:18:39  profilanswer
 

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);
}

n°1873811
Un Program​meur
Posté le 16-04-2009 à 14:32:58  profilanswer
 

xilebo a écrit :

Malheureusement, je viens de découvrir que le code retour d'un exécutable linux ne peut pas dépasser 255.
 
Pour quelle raison cette limitation ?


 
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.


n°1873815
xilebo
noone
Posté le 16-04-2009 à 14:35:55  profilanswer
 

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 :)

n°1873830
Taz
bisounours-codeur
Posté le 16-04-2009 à 14:45:51  profilanswer
 

dangereuse voire terroriste.

n°1873878
Emmanuel D​elahaye
C is a sharp tool
Posté le 16-04-2009 à 15:04:28  profilanswer
 

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.
<...>
Pour quelle raison cette limitation ?  Et y-a-t-il un moyen de l'outrepasser ?


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


Message cité 1 fois
Message édité par Emmanuel Delahaye le 17-04-2009 à 00:58:37

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1874102
xilebo
noone
Posté le 16-04-2009 à 21:31:07  profilanswer
 

Emmanuel Delahaye a écrit :


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




 
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.
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  code retour main()

 

Sujets relatifs
code programmation pour valider des réponses même avec fautes d'orthoInstaller un service Windows codé en Ruby
un bout de code qu'il faut répéter souvent dans le code sourceFlash - code d'accès par XML
Retour chariot : OSX, Linux , CR, CR LF...Votre avis sur ce code de restriction d'accès
extraire code sql d'une bdd sqlserver2000[Résolu] Edit mono-ligne avec retour à la ligne ?
[pataper] package et main et eclipse et ligne de commandeComment modiifier ce code pour avoir une recherche multiple?
Plus de sujets relatifs à : code retour main()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR