2010-03-09 3 views
3

내 명령 행에서 일부 프로세스가 시작되는 이유는 무엇입니까? Windows 기계 블록/버퍼는 리다이렉션되었을 때 전체 출력을 버퍼링합니까?출력이 리디렉션 될 때 일부 cmd가 프로세스 블록/버퍼 출력을 시작합니까?

예 : tracert은 출력 내용을 차단/버퍼하지 않습니다. 실행하는 경우 :

tracert ponyoverflow.com > output.txt 

... output.txt 파일은 시간이 지남에 따라 커집니다. 이것은 내가 행동하는 것을 바라는 방식과 완전히 같습니다.

그러나 잠재적 인 공급 업체의 소프트웨어 제품 (알고 있어야하는 경우 iSpring SDK)을 사용하려고 노력 중이며 프로세스가 완료 될 때까지 전체 출력을 버퍼링하는 것처럼 보입니다. 내가 혼란스러워하는 점은이 소프트웨어가 명령 행에서 실행될 때 출력은 예상대로 줄 단위로 나타납니다.

출력 리디렉션을 사용하거나 사용하지 않는 경우 동작이 다른 이유는 무엇입니까?

후속 기타 질문 :

  • 는 Windows 명령 줄 프로그램의 세계에서 이러한 공통 및/또는 표준인가?
  • 잡을 수있는 방법이 있습니까?
  • Windows 프로그래머 용으로 말하면 어떻게 소프트웨어가 명령 줄에서 어떻게 동작해야한다고 생각합니까?

얼마나 중요한지는 모르겠지만이 모든 실험은 64 비트 Windows 7 Home Premium 컴퓨터에서 진행되고 있습니다.

답변

1

(iSpring에있는 사람들은 더 빨리 내가 ​​꿈을 수 있었던 것보다 나 요청에 응답했다.에 스팟. 여기에 '왜'아래에. 자신의 답변입니다)

이 C++에서

표준 출력은 기본적으로 버퍼링 . 버퍼 크기는 약 4KB입니다. 응용 프로그램이 끝나면 버퍼가 비워집니다. 표준 출력이 콘솔과 연결된 경우 stdout에 기록 된 데이터는 버퍼링되지 않습니다.

+0

@StuThombson 현재 귀하와 동일한 문제가 있습니다 (iSpring이 아님). 해결 방법을 찾았습니까? 프로세스를 즉시 플러시하는 방법이 있습니까? – MiniGod