URL: https://linuxfr.org/forums/programmation-c--2/posts/resolu-execlp-apt-cache-ne-fini-jamais Title: [résolu] execlp apt-cache ne fini jamais Authors: freem Date: 2016年02月29日T18:39:49+01:00 License: CC By-SA Tags: Score: 0 Bonjour. Je jouais tranquillement avec execlp et apt-* pour voir si je pouvais faire yet another frontend, mais je m'aperçois que quand j'exécute `apt-cache pkgnames`, celui-ci ne se finit jamais quand j'ai au préalable redirigé sa sortie dans un pipe... Voici un code minimal qui montre la chose: ```c #include #include int main() { int pfd[2]; if( -1 == pipe( pfd ) ) return 1; pid_t p = fork(); if( !p ) { if( -1 == dup2( pfd[1], STDOUT_FILENO ) ) return 1; execlp( "apt-cache", "apt-cache", "pkgnames" , NULL ); } waitpid( p , NULL, 0 ); } ``` Après exécution, un `ps -p $(pidof apt-cache) -o comm,stat` donne ceci: ``` COMMAND STAT apt-cache S+ ``` Le process est en sommeil... reste a savoir pourquoi... Commenter le dup2 (et le return lié, forcément) fait que le process se finit, rapidement, mais bien sûr tout est envoyé sur la sortie standard, ce qui n'est pas ce que je souhaite (je souhaite récupérer ces données pour mon programme). Le même programme mais avec une autre commande ou une autre action (par exemple `stats` au lieu de `pkgnames`) passe sans problèmes... À noter que dans le man, on peut lire des choses comme ça (au sujet de la façon d'afficher les dépendances par la commande `showpkg`): `Pour connaître le sens de la fin de chaîne, il est préférable de consulter le code source d'APT.`. J'aurais bien utilisé le nouveau `apt`, mais ce n'est pas fait pour être scripté de l'aveu du man. Aller lire le code d'apt-cache ne m'a pas éclairé, il n'y a pas l'air d'y avoir de traitement particulier sur la sortie...

AltStyle によって変換されたページ (->オリジナル) /