full buffer - setvbuf 관련 질문입니다.

익명 사용자의 이미지

#include

FILE *fp;
int main( int argc , char *argv[] )
{
char buf[3];
char *p = "hello\n";
int i;

/* 버퍼 크기 3인 buf를 내부버퍼로 지정 */
setvbuf( stdout , buf , _IOFBF , sizeof buf );
for ( i = 0 ; p[i] ; i++ )
{
printf( "%c" , p[i] );
sleep( 1 );
}
return 0;
}
~
실행하면 buf 사이즈가 3이므로
3초가 지나서 버퍼가 차면
"hel"
이 찍히고,
다시 3초가 지나면
나머지가 찍히면서 종료해야할것같은데요.
그냥 6초있다가 찍히는 이유는 무얼까요?

익명 사용자의 이미지

님이 올린 소스로 저는 테스트 해보니까
잘 동작합니다..

6바이트에서 찍힌것은... hello\n에서 \n을 만나서 찍은거
같은데,, setvbuf가 제대로 설정이 안된거 아닐까요