printf 함수에서 \n을 사용 안할시 문제가 발생하는 경우가 있는지요..?

jungjury의 이미지

검색을 해보니 버퍼링을 하기 때문에 printf 함수 사용시 \n을 적어주지 않으면 의도하지 않는 결과가 나타날 수 있다고 하는데...

언제 그런 상황이 발생하는지요?

코드를 짜서.. 상황을 만들어 보려고 하는데.. 잘 안됩니다..

superkkt의 이미지

#include <stdio.h>
#include <unistd.h>

int
main(void)
{
    printf("aaa");
    sleep(5);

    return 0;
}

printf에서 \n의 유무에 따라 aaa의 출력 시점이 달라집니다.

======================
BLOG : http://superkkt.com

정태영의 이미지

jungjury wrote:
검색을 해보니 버퍼링을 하기 때문에 printf 함수 사용시 \n을 적어주지 않으면 의도하지 않는 결과가 나타날 수 있다고 하는데...

언제 그런 상황이 발생하는지요?

코드를 짜서.. 상황을 만들어 보려고 하는데.. 잘 안됩니다..

중간에 segmentation fault 등이 나는 상황에서 디버거를 사용하기는 귀찮고 -_-;;; 그냥 중간 중간 #ifdef 등의 매크로를 이용해서 printf 로 중간중간 간단한 디버깅용 메시지를 찍는 경우... (fork 를 통해 다중 프로세스 환경이 된 경우에도 문제가 발생할 수 있습니다)

뉴라인이 들어가지 않으면 그 지점을 통과했음에도 실제 메시지는 찍히지 않는 경우가 발생합니다. 라인버퍼를 사용하니까요 (하지만 이 얘기는 버퍼 사이즈를 조정하지 않은 stdout 에 찍을 때에 한정된 얘기입니다.)

뉴라인이 싫은데 자신이 프린트 한 시점에서 바로 출력이 나오길 바란다면 stderr 에 찍는 방법이 있겠습니다 :)

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..