MSDN explique comment faire ce que popen fait à l'aide de l'API Windows dans Pipe Handle Inheritance . Ici, il fournit un exemple bien documenté. C'est beaucoup plus bas niveau que le _popen
fonction trouvée dans la bibliothèque d'exécution liée par Jason, mais utilise exclusivement l'API Win32.
Malheureusement, ce n'est pas particulièrement facile.
Vous devez créer un tube à l'aide de la fonction win32 (CreatePipe), puis généralement vous devez dupliquer la fin du tube (DuplicateHandle) que vous donnez au sous-processus pour lui permettre d'être hérité, sinon ce ne sera pas le cas et ne peut donc pas être utilisé.
Ensuite, vous devez créer un processus à l'aide de CreateProcess (qui prend beaucoup de pointeurs de structure, y compris un STARTUPINFO), et passer dans STARTUPINFO le handle que vous avez dupliqué comme son stdout.
Ensuite, vous pouvez lire à partir de l'extrémité de lecture du tube (ReadFile, etc.) jusqu'à ce que vous atteigniez eof, puis vous devez nettoyer en fermant toutes les différentes poignées win32.
Vous pouvez appeler le _popen
si vous écrivez une application console. Pour plus d'informations, consultez la documentation sur le site MSDN :http://msdn.microsoft.com/en-us/library/96ayss4b(VS.80).aspx