quelqu'un aurait-il une explication au fonctionnement suivant qui me
para=EEt fort =E9trange ?
J'utilise la fonction de la libc "system" (man 3 system) et je cherche
a r=E9cup=E9rer le code de retour de la commande qui s'est ex=E9cut=E9e. Or
j'obtiens une valeur compl=E8tement diff=E9rente entre le code de retour
au sein de la fonction system et celui renvoy=E9 au C/C++. Le code
suivant montre le probl=E8me :
#include <iostream>
#include <cstdlib>
int main( int argc, char ** argv )
{
int rc =3D system ( "false ; rc=3D$? ; echo rc=3D$rc ; exit $rc" );
std::cout << "return code =3D " << rc << std::endl;
return 0;
}
Le r=E9sultat sur Debian etch ou Ubuntu 9.04 avec g++ 3.4 ou 4.3 est le
suivant :
rc=3D1
return code =3D 256
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
pjb
Laurent Plagne writes:
Bonjour,
quelqu'un aurait-il une explication au fonctionnement suivant qui me paraît fort étrange ?
J'utilise la fonction de la libc "system" (man 3 system) et je cherche a récupérer le code de retour de la commande qui s'est exécutée. Or j'obtiens une valeur complètement différente entre le code de retour au sein de la fonction system et celui renvoyé au C/C++. Le code suivant montre le problème :
#include <iostream> #include <cstdlib>
int main( int argc, char ** argv ) { int rc = system ( "false ; rc=$? ; echo rc=$rc ; exit $rc" ); std::cout << "return code = " << rc << std::endl; return 0; }
Le résultat sur Debian etch ou Ubuntu 9.04 avec g++ 3.4 ou 4.3 est le suivant : rc=1 return code = 256
Pourquoi ?
Parce que.
La réponse est sur la page : man 2 wait
C'est que la transmission du code retourné par main dépend du système d'exploitation. Pour le récuperer de façon portable POSIX, il faut utiliser wait(2) (ou une de ses acolytes), et la macro WEXITSTATUS(status).
Note que le status retourné par wait(2) n'est pas (seulement) le code retourné par main ; il le contient, mais il y a d'autres informations dedans (cf les autres macros décrites sur man 2 wait).
-- __Pascal Bourguignon__
Laurent Plagne <laurent.plagne@gmail.com> writes:
Bonjour,
quelqu'un aurait-il une explication au fonctionnement suivant qui me
paraît fort étrange ?
J'utilise la fonction de la libc "system" (man 3 system) et je cherche
a récupérer le code de retour de la commande qui s'est exécutée. Or
j'obtiens une valeur complètement différente entre le code de retour
au sein de la fonction system et celui renvoyé au C/C++. Le code
suivant montre le problème :
#include <iostream>
#include <cstdlib>
int main( int argc, char ** argv )
{
int rc = system ( "false ; rc=$? ; echo rc=$rc ; exit $rc" );
std::cout << "return code = " << rc << std::endl;
return 0;
}
Le résultat sur Debian etch ou Ubuntu 9.04 avec g++ 3.4 ou 4.3 est le
suivant :
rc=1
return code = 256
Pourquoi ?
Parce que.
La réponse est sur la page : man 2 wait
C'est que la transmission du code retourné par main dépend du système
d'exploitation. Pour le récuperer de façon portable POSIX, il faut
utiliser wait(2) (ou une de ses acolytes), et la macro WEXITSTATUS(status).
Note que le status retourné par wait(2) n'est pas (seulement) le code
retourné par main ; il le contient, mais il y a d'autres informations
dedans (cf les autres macros décrites sur man 2 wait).
quelqu'un aurait-il une explication au fonctionnement suivant qui me paraît fort étrange ?
J'utilise la fonction de la libc "system" (man 3 system) et je cherche a récupérer le code de retour de la commande qui s'est exécutée. Or j'obtiens une valeur complètement différente entre le code de retour au sein de la fonction system et celui renvoyé au C/C++. Le code suivant montre le problème :
#include <iostream> #include <cstdlib>
int main( int argc, char ** argv ) { int rc = system ( "false ; rc=$? ; echo rc=$rc ; exit $rc" ); std::cout << "return code = " << rc << std::endl; return 0; }
Le résultat sur Debian etch ou Ubuntu 9.04 avec g++ 3.4 ou 4.3 est le suivant : rc=1 return code = 256
Pourquoi ?
Parce que.
La réponse est sur la page : man 2 wait
C'est que la transmission du code retourné par main dépend du système d'exploitation. Pour le récuperer de façon portable POSIX, il faut utiliser wait(2) (ou une de ses acolytes), et la macro WEXITSTATUS(status).
Note que le status retourné par wait(2) n'est pas (seulement) le code retourné par main ; il le contient, mais il y a d'autres informations dedans (cf les autres macros décrites sur man 2 wait).
-- __Pascal Bourguignon__
Laurent
On 7 sep, 15:17, (Pascal J. Bourguignon) wrote:
Laurent Plagne writes: > Bonjour,
> quelqu'un aurait-il une explication au fonctionnement suivant qui me > paraît fort étrange ?
> J'utilise la fonction de la libc "system" (man 3 system) et je cherche > a récupérer le code de retour de la commande qui s'est exécutée . Or > j'obtiens une valeur complètement différente entre le code de retou r > au sein de la fonction system et celui renvoyé au C/C++. Le code > suivant montre le problème :
> Le résultat sur Debian etch ou Ubuntu 9.04 avec g++ 3.4 ou 4.3 est le > suivant : > rc=1 > return code = 256
> Pourquoi ?
Parce que.
La réponse est sur la page : man 2 wait
C'est que la transmission du code retourné par main dépend du systè me d'exploitation. Pour le récuperer de façon portable POSIX, il faut utiliser wait(2) (ou une de ses acolytes), et la macro WEXITSTATUS(status ).
Note que le status retourné par wait(2) n'est pas (seulement) le code retourné par main ; il le contient, mais il y a d'autres informations dedans (cf les autres macros décrites sur man 2 wait).
-- __Pascal Bourguignon__
Merci beaucoup , ça marche!
On 7 sep, 15:17, p...@informatimago.com (Pascal J. Bourguignon) wrote:
> quelqu'un aurait-il une explication au fonctionnement suivant qui me
> paraît fort étrange ?
> J'utilise la fonction de la libc "system" (man 3 system) et je cherche
> a récupérer le code de retour de la commande qui s'est exécutée . Or
> j'obtiens une valeur complètement différente entre le code de retou r
> au sein de la fonction system et celui renvoyé au C/C++. Le code
> suivant montre le problème :
> Le résultat sur Debian etch ou Ubuntu 9.04 avec g++ 3.4 ou 4.3 est le
> suivant :
> rc=1
> return code = 256
> Pourquoi ?
Parce que.
La réponse est sur la page : man 2 wait
C'est que la transmission du code retourné par main dépend du systè me
d'exploitation. Pour le récuperer de façon portable POSIX, il faut
utiliser wait(2) (ou une de ses acolytes), et la macro WEXITSTATUS(status ).
Note que le status retourné par wait(2) n'est pas (seulement) le code
retourné par main ; il le contient, mais il y a d'autres informations
dedans (cf les autres macros décrites sur man 2 wait).
> quelqu'un aurait-il une explication au fonctionnement suivant qui me > paraît fort étrange ?
> J'utilise la fonction de la libc "system" (man 3 system) et je cherche > a récupérer le code de retour de la commande qui s'est exécutée . Or > j'obtiens une valeur complètement différente entre le code de retou r > au sein de la fonction system et celui renvoyé au C/C++. Le code > suivant montre le problème :
> Le résultat sur Debian etch ou Ubuntu 9.04 avec g++ 3.4 ou 4.3 est le > suivant : > rc=1 > return code = 256
> Pourquoi ?
Parce que.
La réponse est sur la page : man 2 wait
C'est que la transmission du code retourné par main dépend du systè me d'exploitation. Pour le récuperer de façon portable POSIX, il faut utiliser wait(2) (ou une de ses acolytes), et la macro WEXITSTATUS(status ).
Note que le status retourné par wait(2) n'est pas (seulement) le code retourné par main ; il le contient, mais il y a d'autres informations dedans (cf les autres macros décrites sur man 2 wait).