Win32 API の Posix popen() に相当するものは何ですか?

MSDN では、パイプ ハンドルの継承で Windows API を使用して popen が行うことを説明しています。ここでは、十分に文書化された例を提供します。 _popen よりもはるかに低レベルです。 Jason によってリンクされたランタイム ライブラリにある関数ですが、Win32 API のみを使用します。


_popen を呼び出すことができます コンソール アプリケーションを作成している場合。詳細については、MSDN サイトのドキュメントを参照してください:http://msdn.microsoft.com/en-us/library/96ayss4b(VS.80).aspx


残念ながら、これは特に簡単ではありません。

win32 関数 (CreatePipe) を使用してパイプを作成する必要があります。通常、サブプロセスに渡して継承できるようにするために、パイプの末尾 (DuplicateHandle) を複製する必要があります。したがって、使用できません。

次に、CreateProcess (STARTUPINFO を含む多くの構造体ポインターを使用する) を使用してプロセスを作成し、複製したハンドルを標準出力として STARTUPINFO に渡す必要があります。

次に、パイプ (ReadFile など) の読み取り側から eof に到達するまで読み取ることができます。その後、さまざまな win32 ハンドルをすべて閉じてクリーンアップする必要があります。