Среда выполнения C создает наследуемые дескрипторы по умолчанию.
ofstream outFile("filename.txt") ;
CreateProcess("program.exe", ..., true, ...) ; //program.exe will inherit the above file handle
Итак, если вы хотите, чтобы дескриптор был унаследован, вам не нужно ничего делать.
Если вы ДЕЛАЕТЕНЕ хотите, чтобы дескриптор был унаследован, вы должны сами установить флаг HANDLE_FLAG_INHERIT
дескриптора, используя функцию WinAPI SetHandleInformation
, например:
FILE* filePtr = fopen("filename.txt", "w") ;
SetHandleInformation( (HANDLE)_get_osfhandle(_fileno(filePtr)), HANDLE_FLAG_INHERIT, 0) ;
ofstream outFile(filePtr) ;
В третьей строке выше, конструктор ofstream(FILE*)
является расширением стандарта, существующего в Visual Studio (я не знаю о других компиляторах).
После этого конструктора filePtr
теперь принадлежит outFile
, поэтому вызов outFile.close()
закрывается filePtr
.Вы можете полностью забыть о переменной filePtr
.
Документация: fopen , _fileno , _get_osfhandle , SetHandleInformation