J'essaie de démarrer une application externe via system()
- par exemple, system("ls")
. Je voudrais capturer sa sortie au fur et à mesure afin que je puisse l'envoyer à une autre fonction pour un traitement ultérieur. Quelle est la meilleure façon de faire cela en C / C ++?
Réponses
Trop de publicités?EDIT: mal lu la question est de vouloir passer la sortie à un autre programme, pas d'autre fonction. popen() est presque certainement ce que vous voulez.
Le système vous donne un accès complet à la coque. Si vous souhaitez continuer à l'utiliser, vous pouvez rediriger la sortie vers un fichier temporaire, par system("ls > tempfile.txt"), mais le choix d'une fichiers temporaires sécurisés est une douleur. Ou, vous pouvez même la rediriger vers un autre programme: system("ls | otherprogram");
Certains recommandent le popen() de la commande. C'est ce que vous voulez si vous pouvez traiter la sortie vous-même:
FILE *output = popen("ls", "r");
qui vous donnera un pointeur de FICHIER, vous pouvez lire à partir de la sortie de la commande.
Vous pouvez également utiliser la pipe() pour créer une connexion en combinaison avec fork() pour créer de nouveaux processus, dup2() pour modifier l'entrée standard et la sortie de leur, exec() pour exécuter de nouveaux programmes, et wait() dans le programme principal à attendre pour eux. C'est tout simplement la mise en place du pipeline beaucoup comme le shell. Voir la pipe() de la page de manuel pour plus de détails et un exemple.