Comment puis-je capturer la sortie d'un autre processus en utilisant C?

StackOverflow https://stackoverflow.com/questions/646868

  •  22-07-2019
  •  | 
  •  

Question

Comment puis-je capturer la sortie d'un autre processus en utilisant du C pur? Pouvez-vous fournir un exemple de code?

EDIT: supposons Linux. Je serais intéressé par "joli portable" code. Tout ce que je veux, c'est exécuter une commande, capturer sa sortie et la traiter d'une manière ou d'une autre.

Était-ce utile?

La solution

Il existe plusieurs options, mais cela dépend en partie de votre plate-forme. Cela dit, popen devrait fonctionner dans la plupart des endroits, par exemple

.
#include <stdio.h>

FILE *stream;
stream = popen("acommand", "r");

/* use fread, fgets, etc. on stream */

pclose(stream);

Notez que cela a une utilisation très spécifique, il crée le processus en exécutant la commande acommand et attache sa sortie standard de manière à le rendre accessible depuis votre programme via le flux < code> FICHIER * .

Si vous devez vous connecter à un processus existant ou si vous devez effectuer des opérations plus riches, vous devrez peut-être rechercher d'autres installations. Unix dispose de plusieurs mécanismes pour connecter un processus stdout, etc.

Sous Windows, vous pouvez utiliser l'API CreateProcess pour créer un nouveau processus et relier son handle de sortie standard à ce que vous voulez. Windows prend également en charge popen .

Il n’existe pas de moyen simple pour faire cela que je sache, donc cela dépend toujours des APis spécifiques à la plate-forme.

D'après vos modifications, popen semble idéal, il est "plutôt portable", je ne pense pas qu'il existe un système d'exploitation unix comme celui-ci sans, il fait en effet partie de la spécification Single Unix, et POSIX et vous permet de faire exactement ce que vous voulez, exécutez une traiter, saisir sa sortie et la traiter.

Autres conseils

Si vous pouvez utiliser les tuyaux système, dirigez simplement la sortie de l'autre processus vers votre programme C et dans votre programme C, lisez simplement l'entrée standard.

otherprocess | your_c_program

Quel système d'exploitation utilisez-vous? Sur le système d’exploitation de type * nix, si vous êtes en train de générer des sorties vers STDOUT ou STDERR, vous pouvez évidemment utiliser des tubes

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top