c / c ++, mfc: не передавать открытые файлы / дескрипторы порожденному процессу - PullRequest
0 голосов
/ 07 октября 2010

В 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 Ответ

0 голосов
/ 08 октября 2010

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

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

...