• [^] # Re: Je ne suis pas un programmeur C...

    Posté par . 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 avec pipe et dup.

    en gros, system(foo) ça fait if(0 == fork()) exec(foo)

    int p[2];
    int code_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 pipe
     execjesaisplusquoi("/bin/sh", "sh", "-c", "unrar blablalba ; echo $?");
    } else {
     char ret[4]
     read(pipe[0],4,ret) // lire le code retours
     code_retour = atoi(ret);
    }

    Please do not feed the trolls