2008-09-24 5 views

Répondre

4

Fondamentalement, vous devez exécuter le processus d'exécution pour écrire dans un canal et lire la sortie de ce canal.

[EDIT] Je sais comment SciTE fait cela (vous pouvez jeter un oeil à la source: win32/SciTEWin.cxx, fonction ExecuteOne), j'ai cherché un peu plus générique, trouvé How to spawn console processes with redirected standard handles de Microsoft lui-même.
Si vous utilisez CreatePipe PeekNamedPipe CreateProcess mot-clé, par exemple, vous pourriez trouver d'autres exemples.

0

Si l'élégance n'est pas une priorité, une solution très simple pourrait être de rediriger la sortie vers un fichier, puis de lire le contenu du fichier.

1

Une autre option est d'utiliser Boost.Process(Boost.Process n'est pas (encore) une bibliothèque Boost C++ officielle, elle doit être téléchargée et installée séparément).

L'exemple "Child.4 - Reading from a child using asynchronous I/O" montre comment rediriger la sortie du processus enfant dans un flux C++ (et accéder ultérieurement au contenu).

Exemple "Child.4 - Reading from a child using asynchronous I/O" montrent comment utiliser Boost.Process togehter avec Boost.Asio pour accéder aux Childs E/S asynchrones .

Les avantages de cette méthode sont que Boost.Process prend en charge l'API Windows et l'API POSIX.