2013-09-30 6 views

Répondre

5

Il y a deux façons de le faire. La façon simple, si vous voulez juste lire la sortie d'un programme externe, est d'utiliser popen:

FILE* fp = popen("/some/command argument1 argument2", "r"); 

char input[256]; 
while (fgets(input, sizeof(input), fp)) 
{ 
    std::cout << "Got input from command: " << input; 
} 

L'autre façon plus complexe (et comment popen travaille dans les coulisses) est de créer un nouveau tuyau anonyme (avec pipe), un nouveau processus (avec fork), configurer la sortie standard du nouveau processus pour utiliser le canal, puis exec le programme dans le processus enfant. Ensuite, vous pouvez lire la sortie du programme à partir de la fin de lecture du tube. C'est plus flexible, et la manière recommandée (même si c'est plus compliqué à mettre en place). C'est également le seul moyen de pouvoir effectuer une communication bidirectionnelle, c'est-à-dire d'écrire sur l'entrée standard des programmes externes et à partir de sa sortie.