Même si system gardait un shell ouvert, code_retour = system("echo $?"); n'aurait pas fonctionné non plus. echo $? va afficher la variable ? et retourner 0. Elle écrit une représentation en base 10 du code de retour sur la sortie standard, pour la récupérer il faut jouer des redirections avec pipe et dup.
en gros, system(foo) ça fait if(0 == fork()) exec(foo)
intp[2];intcode_retour;pipe(p);if(0==fork()){dup2(1,pipe[1]);// pas sûr de l'ordre des paramètres, il faut faire en sorte que le processus fils écrive dans le pipeexecjesaisplusquoi("/bin/sh","sh","-c","unrar blablalba ; echo $?");}else{charret[4]read(pipe[0],4,ret)// lire le code retourscode_retour=atoi(ret);}
[^] # Re: Je ne suis pas un programmeur C...
Posté par Zylabon . En réponse au message retour de system("echo $?"); inattendu. Évalué à 4.
Même si system gardait un shell ouvert,
code_retour = system("echo $?");n'aurait pas fonctionné non plus.echo $?va afficher la variable?et retourner 0. Elle écrit une représentation en base 10 du code de retour sur la sortie standard, pour la récupérer il faut jouer des redirections avecpipeetdup.en gros,
system(foo)ça faitif(0 == fork()) exec(foo)Please do not feed the trolls