Мой вопрос связан с "Отключить буферизацию в конвейере" хотя и касается Windows, а не Unix.
Я пишу клон Make и не позволяю параллельным процессам перебивать друг друга'консольный вывод Я перенаправил вывод в каналы (как описано в здесь ), по которым я могу выполнить любую фильтрацию, какую захочу.К сожалению, долго выполняющиеся процессы теперь буферизуют свои выходные данные, а не отправляют их в режиме реального времени, как это делается на консоли.
Из-за просмотра источников MSVCRT кажется, что основной причиной является то, что GetFileType () используется дляпроверьте, подключены ли стандартные дескрипторы ввода-вывода к консоли, которая затем устанавливает внутренний флаг и в конечном итоге отключает буферизацию.
Очевидно, отдельный массив наследуемых файловых дескрипторов и флагов также может передаваться через недокументированныйlpReserved2 член STARTUPINFO структурированный при создании процесса.О единственном рабочем решении, которое я выяснил, - это использовать этот список и просто лгать о типе устройства при установке флагов для stdout / stderr.
Теперь, тогда ... Есть ли вменяемый способ решения этой проблемы?