제 질문은 유닉스가 아닌 Windows에 관한 것이지만 "Turn off buffering in pipe"과 관련이 있습니다.Win32에서 콘솔 출력을 필터링 할 때 원하지 않는 버퍼링이 발생했습니다.
나는 복제본을 작성하고 각자 다른 사람의 콘솔 출력을 스래 싱하지 못하도록 병렬 처리를 중지하고 있습니다. 출력을 원하는대로 필터링 할 수있는 파이프 (here에 설명 된대로)로 리디렉션했습니다. 불행히도 오래 실행되는 프로세스는 이제 콘솔 에서처럼 실시간으로 보내지 않고 출력을 버퍼링합니다.
MSVCRT 소스를 들여다 보면 GetFileType()이 표준 I/O 핸들이 콘솔에 연결되어 있는지 여부를 확인하는 데 사용됩니다. 그러면 콘솔이 내부 플래그를 설정하고 버퍼링을 해제합니다.
상속 가능한 파일 핸들과 플래그의 별도 배열은 프로세스 생성시 STARTUPINFO 구조화되지 않은 lpReserved2 멤버를 통해 전달 될 수 있습니다. 알아 낸 유일한 해결책은이 목록을 사용하고 stdout/stderr 플래그를 설정할 때 장치 유형에 관한 것입니다.
이제 ... 정상인이이 문제를 해결하는 방법은입니까?
이것은 성능을 향상시킬뿐만 아니라 표준을 준수하기 위해 수행되었습니다. C99, §7.19.3/7 : "표준 입력과 표준 출력 스트림은 스트림이 대화 형 장치를 참조하지 않을 것으로 판단 될 수있는 경우에만 완전히 버퍼링됩니다." –