2013-07-10 2 views
1

하드 디스크 인 fstest.exe를 테스트하는 도구를 사용하고 있습니다. 명령 줄에서 잘 실행되어 다양한 파일 생성/삭제/변경 작업을 수행하는 데 걸리는 시간을 표시합니다. fstest.exe otherParams으로 명령 줄에서 실행할 때 일반적인 출력은 다음과 같습니다출력이 콘솔에 나타나지만 파일로 리디렉션되면 사라집니다.

--- 
CPU Usage: 0.0% 
Disk reads/sec: 0 
Disk writes/sec: 0 
Disk bytes/read: 0 
Disk bytes/write: 0 
Test duration: 0 milliseconds, 1153 ticks (3507177 ticks/sec) 
--- 

문제는 내가 파일에 출력을 리디렉션 할 때, 그것은 아무것도 표시되지 않는다는 것입니다 :

fstest.exe otherParams > out.txt가를 생성 비어있는 out.txt 파일. 그렇지 않으면 명령이 잘 실행되고 (실행의 일부로 몇 개의 테스트 파일이 만들어 짐).

어떻게이 응용 프로그램이 출력을 파일로 리디렉션 할 수 있습니까? 필자는 Start-Process를 통해 PowerShell을보다 자세히 살펴 보았습니다. 표준 출력 스트림과 표준 오류 스트림은 모두 비어 있습니다. 내가 해봤

다른 것들 : (. 그 out.txt와 err.txt 모두 빈을 모두 생성)

cmd /c "fstest.exe otherParams > out.txt" 

fstest.exe otherParams 2>&1 >> out.txt 

fstest.exe otherParams | sort 

powershell Start-Process -FilePath .\fstest.exe -ArgumentList @("create2", "-openexisting") -RedirectStandardOutput out.txt -RedirectStandardError err.txt -wait 

응용 프로그램이 있는지 여부에 따라 출력을 변경하는 원인이 무엇

그것은 방향이 바뀌었고 파일로 리디렉션 할 수있는 방법이 있습니까?

업데이트 : 나는 소스 코드를 알고있다. 그것은 C++이고 출력은 단지 printf 문장입니다.

+1

프로그램이 정상적으로 종료됩니까? 아니면 신호 인터럽트로 방해하고 있습니까? 버퍼가 플러시되지 않거나 그런 식으로 종료되는 경우 버퍼가 손실되지 않을 수 있습니다. – Gray

+1

@ 그레이 그것은 항상 정상적으로 종료합니다 (반환을 통해, 그리고 종료 코드는 0입니다),하지만 어떤 이유 때문에 파일로 리디렉션 할 때 버퍼를 플러시하지 않습니다 - 콘솔에만 인쇄 할 때. – PotatoEngineer

답변

2

그것은 문제의 프로그램을 끈다가에 printf을 수행 한 후 표준 출력 플러싱되지 않은 : 당신의 프로그램이 쓰는 기술자를 식별하기 위해 개별 파일을 리디렉션하십시오. 외관상으로는, cmd는 출력을 파일로 재지향 할 때가 아니라 콘솔로 출력 할 때 그 버퍼를 비울 것입니다. 콘솔이 플러시를 강제로 수행하기 전에 파일 핸들이 닫혔습니다. 프로그램이 정상적으로 종료되었습니다 (반환 코드는 항상 0으로 종료 됨).

질문에 답하려면 : 프로그램을 수정해야했습니다. 명령 줄 스위치 나 리디렉션을 사용하여 변경할 수있는 방법이 없습니다.

+1

하! 나는 옳았다 ... 나는 방금 대답으로 게시 했어야했다. 당신이 고칠 수있어서 다행입니다. – Gray

+0

흥미 롭습니다. 나는 프로그램 종료가 프로세스와 관련된 모든 IO 버퍼를 플러시했을 것이라고 생각했을 것이다. – Curt

+1

@Gray 비정상적으로 나가는 것만 큼 가까이서 나갈 수는 없었다.종료 코드는 항상 0이었고 디버거없이 소스 코드를 살펴보면 정상적으로 종료 된 것처럼 보였습니다. – PotatoEngineer

1

는 표준 출력 대신, 표준 오류에 쓰고있는 경우, thusly 히 재 :

fstest.exe otherParams 2> out.txt 
+0

아아, 운이 없다. 두 스트림을 모두 파일로 리디렉션하려고했습니다. – PotatoEngineer

+0

@PaulMarshall이 사실을 알게되면 게시하십시오. - 정말 궁금합니다. – Curt

2

CMDup to 10 file descriptors를 처리 할 수 ​​있습니다.

fstest.exe {params} 0>out0.txt 3>out3.txt 4>out4.txt 5>out5.txt ... 
+0

cmd 창이 닫히고 out4.txt에 명령 프롬프트가 있지만 나머지는 모두 비어 있습니다. – PotatoEngineer

관련 문제