2013-05-23 3 views
8

그래서 이것은 어리석은 질문 일 뿐이지 만 내가 잘못하고있는 것을 볼 수 없습니다.출력 리디렉션을하면 빈 파일이 생성됩니다.

./ar과 같이 호출하면 출력을 생성하는 프로그램을 실행하고 있습니다. 출력은 다음과 같습니다.

-0.00781 0.02344 0.98828               
-0.01172 0.02734 0.98828               
-0.01562 0.02344 0.98047               
-0.00781 0.02344 1.00000               
-0.00391 0.02344 0.98438 

매초마다 새로운 출력 라인이 작성됩니다.

./ar > log과 같은 코드를 호출하고 몇 초 후 ctrl-c을 사용하여 프로그램을 종료하면 log 파일이 비어 있습니다.

이 코드는 임베디드 시스템에서 실행하고 있습니다. 시스템에는 내가 실행중인 파티션 인 쓰기 가능한 파티션이 있으며 루트로 로그인 할 때 쓰기 권한이 있습니다.

+10

리디렉션하면 출력은 블록 버퍼가 아니고 블록 버퍼가됩니다. 블록이 가득 차기 전에 Ctrl-C를 누르면 파일에 아무 것도 기록되지 않습니다. 'fflush (stdout)'을 사용하여 파일에 즉시 쓰게 할 수있다. –

+0

고마워, 내 문제가 해결, 나는 모든 printf 성명 이전에이 줄을 실행해야했다. – James

+3

'printf'가 더 자연 스럽다. –

답변

-1

이유는 UNIX 시스템의 지연 개념입니다.

+0

출력을 리디렉션하고 프로세스를 종료 할 때 출력이 아직 준비되지 않았 음을 의미합니다. 파이프 작업은 첫 번째 프로세스의 출력 준비가 완료된 경우에만 출력을 다음 프로세스로 전달합니다. –

1

./ar를 호출 할 때 표준 출력을보고 있습니까? 표준 오류 일 수 있습니다. ./ar> log 2> err을 실행하여 stdout 용과 stderr 용의 두 개의 파일을 만들어보십시오.

또는 ./ar 2> &> 로그를 사용하여 두 스트림에 대해 하나의 파일을 가져옵니다.

관련 문제