c/ C++, mfc: не передавать открытые файлы / дескрипторы порожденному процессу

В Unix я знаю процедуру: между fork() и exec() в дочернем я закрываю все, кроме stdin/out/err, так что все открытые порты или файлы не передаются в программу, которую я хочу запустить.

Но как мне это сделать в Windows? В моем случае я реализую DLL на C/C++, и мне нужно закрыть как некоторые файлы, которые я открыл (косвенно через некоторые объекты), так и сокеты, открытые приложением, загрузившим dll, чтобы эти дескрипторы открытых файлов не были перешел в приложение я порождаю. Приложение не передает эти дескрипторы в DLL, так как мой код не нуждается в них...

Пока что код просто вызывает _spawnl(_P_NOWAIT, "foo.exe", "foo.exe", "arg1", "arg2",NULL); Visual Studio 2008, если это имеет значение.

Спасибо за вашу помощь.

1 ответ

Решение

Хм - извините, что немного угадаю, но вы уверены, что spawnl в Windows пропускает дескрипторы открытого файла?

Если это так, возможно, вы захотите взглянуть на CreateProcess и StartupInfo - они позволяют лучше контролировать то, что передается / наследуется новому процессу

Другие вопросы по тегам