건프의 소소한 개발이야기

[고급 C] Debug Message 잘 보는 방법 (2) - 표준 입력/출력 본문

개발 이야기/고급 C 이야기

[고급 C] Debug Message 잘 보는 방법 (2) - 표준 입력/출력

건강한프로그래머 2016. 5. 1. 02:19

안녕하세요, 건프입니다.


Debug Message 잘보는법(1) 에 이어서, 이번에 해볼것은 표준 입/출력에 대한 이해 입니다.


프로세스가 만들어지면, 기본으로 항상 열려지는 파일 디스크립터 를 표준 파일 디스크립터 라고 하고,

unistd,h 안에 각각 STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO => 0, 1, 2 로 매핑되어 있습니다.


따라서, printf("stdout message\n"); fprintf(stdout, "stdout message\n"); 는 표준 출력 메세지 이고,

fprintf(stderr, "stderr message\n"); 은 표준 에러 메세지 입니다.


아니, 어차피 화면에 보이는건 똑같은데 둘이 무슨 차이가 있냐고요?

저도 처음에는 그렇게 생각했으나, 여기 극명한 차이를 들어내는 부분이 있습니다.


ls 라는 명령어로 abc.c 파일을 찾습니다.

하지만 이런 파일은 현재 디렉토리에 없기 때문에, ls 프로그램은 없다는 오류 메세지를 내뱉습니다.

그럼 이것은 표준 출력의 결과일까요, 표준 에러의 결과일까요?



(프로그램) > (파일명)

표준 입력 리다이렉팅 으로써, 프로그램의 표준 출력 결과를 콘솔이 아니라, 파일에다가 작성해달라는 의미입니다.

ls abc.c > output 이라고 작성했으나, 콘솔에는 보란듯이 오류 메세제가 찍혀 나옵니다.

cat 명령어로 파일을 확인해봐도 아무런 내용도 없습니다.


그렇다면, 표준 에러 리다이렉팅 도 가능할까요?


(프로그램) 2> (파일명)

이렇게 하시면 표준 에러 리다이렉팅이 됩니다.

결과를 보시면, 오류메세지가 output 파일 내로 들어갓음을 확인할 수 있습니다.


(참고)

표준 출력 및 표준 에러를 한 파일에 모두 리다이렉팅 시키고 싶다면,

(프로그램) > (파일명) 2>&1 

이렇게 작성하시면 된다고 합니다.


이제 이런식으로 응용할 수 있습니다.




디버그 메세지로 출력하는 내용은 다른 하나의 파일로 모아서 볼 수 있도록 만들 수 있겠죠?


이렇게 우리는 로그( log) 파일을 만들어낼 수 있습니다.






Comments