@Mercury13
Программист на «си с крестами» и не только

Как сделать, чтобы в WinAPI stdout перенаправлялся, а stderr уходил в никуда?

Хочу запускать через каналы WinAPI программу, которая слегка «срёт» в stderr. Потому хочу, чтобы поток stderr уходил в никуда, а stdout — в именованный канал.

В структуре STARTUPINFO есть один бит — STARTF_USESTDHANDLES. Можно ли сделать так, чтобы один из этих трёх дескрипторов был нулевым, или буфер опустошался при переполнении, или что-то ещё — но только чтобы программа не останавливалась, если буфер переполнится?

ПОВТОРЯЮ ДЛЯ СИСАДМИНОВ. Программирование! Windows API! CreateProcess!
Я знаю, что такое 2>nul. И какой админ заменил «среднюю» сложность на «простую»: WinAPI — в принципе не тривиальная штука.
  • Вопрос задан
  • 77 просмотров
Пригласить эксперта
Ответы на вопрос 3
@cicatrix
было бы большой ошибкой думать
Язык какой?
На C# это гораздо проще делается, без Win32API вообще.
На плюсах смотрим структуру STARTUPINFO
typedef struct _STARTUPINFO {
  DWORD  cb;
  LPTSTR lpReserved;
  LPTSTR lpDesktop;
  LPTSTR lpTitle;
  DWORD  dwX;
  DWORD  dwY;
  DWORD  dwXSize;
  DWORD  dwYSize;
  DWORD  dwXCountChars;
  DWORD  dwYCountChars;
  DWORD  dwFillAttribute;
  DWORD  dwFlags;
  WORD   wShowWindow;
  WORD   cbReserved2;
  LPBYTE lpReserved2;
  HANDLE hStdInput;
  HANDLE hStdOutput;
  HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;

В dwFlags обязательно устанавливаем STARTF_USESTDHANDLES
После вызова CreateProcess в hStdInput, hStdOutput и hStdError получают указатели на соответствующие потоки.
Ответ написан
@res2001
Developer, ex-admin
prog.exe 2>nul
Ответ написан
tsklab
@tsklab
Системный администратор, программист
поток stderr уходил в никуда
2>NUL

WinAPI — в принципе не тривиальная штука.
Может быть, но описание подробное есть stdin, stdout, stderr.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы