• [^] # Re: Quelques problèmes

    Posté par . En réponse au message introduire redirection dans un minishell. Évalué à 1. Dernière modification le 07 mars 2016 à 17:07.

    Note bien que ce code est buggé, lui aussi :p

     set_stdio();
     for(dir in path)
     exec();
     // not found
     print("command not found")

    Pourquoi ?
    Parce que le print() n'a rien à faire dans le fils ! Le stdout/stderr est (potentiellement) déja modifé par set_stdio(). Tu n'as pas d'autre choix que de faire toi-même une recherche exhautive dans path à coups de fstat, au bien tu laisse tomber car c'est sujet à race condition (i.e. on supprimer le programme juste après que tu l'aie trouvé, je ne sais pas si posix prévois une sorte de exec avec le fd du binaire déja ouvert), ou bien tu fais un exit(valeur_magique) et tu regardes après dans le père si le résultat du wait() te renvois cette valeur, mais bon ce n'est pas infaillible car rien n'empêche le programme de renvoyer légitimement cette valeur (je crois que bash combine ces deux méthodes), merci POSIX... ;-)