0

UNIXでは、ルーチンを知っています。子のfork()とexec()の間で、stdin / out / errを除くすべてを閉じて、開いているすべてのポートまたはファイルが実行したいプログラムに渡されないようにします。

しかし、Windowsでこれを行うにはどうすればよいですか?私の場合、C / C ++でDLLを実装しており、(いくつかのオブジェクトを介して間接的に)開いたいくつかのファイルと、dllをロードしたアプリケーションによって開かれたソケットの両方を閉じる必要があります。これにより、これらの開いたファイルハンドルは閉じられません。スポーンしているアプリケーションに渡されます。私のコードはそれらを必要としないはずなので、アプリはそれらのハンドルをDLLに渡しません...

これまでのところ、コードは単に_spawnl(_P_NOWAIT、 "foo.exe"、 "foo.exe"、 "arg1"、 "arg2"、NULL);を呼び出しています。それが重要な場合は、VisualStudio2008。

ご協力いただきありがとうございます。

4

1 に答える 1

0

うーん-ここで少し推測して申し訳ありませんが、Windowsのspawnlは開いているファイルハンドルを渡しますか?

もしそうなら、CreateProcessとStartupInfoを見たいかもしれません-これらは、新しいプロセスに渡される/継承されるものをより細かく制御することを可能にします

于 2010-10-08T03:56:03.193 に答える