Re[3]: Перенаправление ввода-вывода консоли
От: Alex Fedotov США  
Дата: 09.05.02 14:59
Оценка: 8 (1)
Здравствуйте SergH, Вы писали:

SH>Здравствуйте Dutchman, Вы писали:


D>>Гляди:


SH>[skip]


SH>Вот такой процесс-родитель:


SH>
SH>#include <windows.h>

SH>void main()
SH>{
SH>    HANDLE hFile;
SH>    
SH>    hFile = CreateFile(
SH>                "stdout.txt",
SH>                GENERIC_WRITE | GENERIC_READ, 
SH>                FILE_SHARE_READ | FILE_SHARE_WRITE, 
SH>                NULL,
SH>                OPEN_ALWAYS,
SH>                0,
SH>                NULL);

SH>    SetFilePointer(hFile, 0, NULL, FILE_END);

SH>    STARTUPINFO si = {sizeof(STARTUPINFO)};

SH>    si.hStdOutput = hFile;

SH>    PROCESS_INFORMATION pi;

SH>    CreateProcess(NULL, "printer.exe", NULL, NULL, FALSE, CREATE_NO_WINDOW, 0, 0, &si, &pi);

SH>    // MessageBox(NULL, "Press OK", "", MB_OK);
SH>    CloseHandle(hFile);
SH>}
SH>


SH>Запускает такого потомка:


SH>
SH>#include <stdio.h>

SH>void main()
SH>{
SH>    printf("Hello, World");
SH>}
SH>


SH>И не работает! В смысле файл stdout.txt пуст. На экран, правда, тоже ничего не выводится. Если сделать hFile наследуемым, лучше не становится. Если убрать CREATE_NO_WINDOW тоже. Неужели этот механизм не предназначен для файлов, а только для каналов?


A если si.dwFlags = STARTF_USESTDHANDLES добавить и разрешить наследование хэндлов дочерним процессом, заработает?
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.