게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[Q] stdin 과 stderr 를 하나의 파일로 저장하면서 순서까지?
게시물ID : programmer_10013짧은주소 복사하기
작성자 : 엔델
추천 : 0
조회수 : 371회
댓글수 : 5개
등록시간 : 2015/05/13 16:57:08
옵션
  • 본인삭제금지
#include <stdio.h>

int main()
{
        fprintf(stdout, "this is 1 stdout \n");
        fprintf(stderr, "this is 2 stdERR!!!\n");
        fprintf(stdout, "this is 3 stdout \n");
        fprintf(stderr, "this is 4 stdERR!!!\n");
        fprintf(stdout, "this is 5 stdout \n");
        fprintf(stderr, "this is 6 stdERR!!!\n");
        return 0;
}

위와 같은 간단한 C 코드가 있습니다.

fprintf(stdout, .... ) 로 출력한 것은 stdout 으로 출력될 것이고,
fprintf(stderr, .... ) 로 출력한 것은 stderr 로 출력되겠지요.

이제 이 출력을 '리다이렉션' 기능을 이용해서 파일로 저장하고자 합니다.
> 는 stdout 을 리다이렉션 하고, 2> 는 stderr 를 리다이렉션 합니다.

./a.out > a.txt 2> b.txt

라고 실행하면 stdout 은 a.txt 에, stderr 는 b.txt 에 저장됩니다.

하지만, 원하는 것은 화면에 보이는 것이 그대로 파일로 저장되길 바랍니다.

./a.out > c.txt 2> c.txt 
를 실행하면 일부 출력 결과가 짤려서 보입니다.

이런 경우를 위해서 만들어진게 >& 라는 건데, 2>&1 을 하면 stderr 을 stdout 으로 머지해줍니다.

./a.out > d.txt 2>&1 
그로나 위의 명령을 실행하면, 모든 출력 결과가 저장되긴 하지만, 순서가 맞지 않습니다.

# ./a.out 
this is 1 stdout 
this is 2 stdERR!!!
this is 3 stdout 
this is 4 stdERR!!!
this is 5 stdout 
this is 6 stdERR!!!

# ./a.out > d.txt 2>&1  
# cat d.txt
this is 2 stdERR!!!
this is 4 stdERR!!!
this is 6 stdERR!!!
this is 1 stdout 
this is 3 stdout 
this is 5 stdout
 
 
a.out 을 실행한 것과 동일한 결과를 리다이렉션을 이용해서 파일로 저장할 방법이 있을 까요?

- 엔델 -
출처
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호