[질문] 이상한 현상... 궁굼해요 알려주세요..
글쓴이: iamlow / 작성시간: 수, 2006/01/18 - 1:55오후
자 간단한 예제입니다.
int main(void)
{
for(;;) {
printf("*");
// fflush(stdout);
// sleep(1);
}
return 0;
}
위 프로그램을 실행시키면 화면에 별표가 계속찍힙니다.
그런데 위 프로그램에서 sleep(1)의 주석을 제거하면??
화면에 *를 찍지 않습니다.
그러다 Ctrl+C를 해주면 찍힙니다~~
그리고 fflush(stdout)의 주석을 제거하면 찍히구요...
왜 플러쉬를 하면 찍히고 안하면 안찍을까요??
왜 그런건가요?? 도데체 printf와 sleep과 무슨 관계가 있는건가요?
int main(void)
{
for(;;) {
printf("*");
fflush(stdout);
sleep(1);
}
return 0;
}
Forums:
전 아랫 소스 코드도 '*'문자 출력 잘 하는데요.
전 아랫 소스 코드도 '*'문자 출력 잘 하는데요.
이것이 버퍼링하는 I/O의 장점이자, 처음 당하는 사람들에게는 뒤통수입니
이것이 버퍼링하는 I/O의 장점이자, 처음 당하는 사람들에게는 뒤통수입니다. :)
write 시스템 콜을 줄여주거든요.
---
http://coolengineer.com
[quote="pynoos"]이것이 버퍼링하는 I/O의 장점이자, 처음
지난학기 수업시간에 모 교수님께서 하신말씀이 생각나는군요 :)
----------------------------------------
Re: [질문] 이상한 현상... 궁굼해요 알려주세요..
별로 관계 없습니다. 문제는 printf()가 버퍼를 이용하기 때문입니다. 효율을 높이기
위해 출력할 글자가 생길 때마다 바로 출력하는 것이 아니라 버퍼에 쌓아놨다가
버퍼가 차면 한꺼번에 출력하기도 하거든요. fflush()는 강제로 버퍼에 있는 내용을
출력하는 것이고요.
버퍼링을 원하지 않는다면 setvbuf()로 조정을 하든지 버퍼링을 하지 않는 stderr로
출력하면 됩니다.
아직 풀리지 않은 문제..ㅠㅠ
답변 감사드립니다. 그런데..
별로 관계가 없으면
int main(void)
{
for(; {
printf("*");
// sleep(1);
}
return 0;
}
위와같이 실행하거나
int main(void)
{
for(; {
printf("*");
sleep(1);
}
return 0;
}
이렇게 실행하거나 똑같이 화면에 뿌려야 되는게 정상 아닙니까?
다만 1초의 딜레이가 생긴다는 것을 제외하고는 말입니다.
그런데 sleep(1)은 화면에 *을 찍지 못한단 말이죠...
다시한번 명확한 답변을 부탁드립니다.
Re: [질문] 이상한 현상... 궁굼해요 알려주세요..
다시 한번 답이 됐기를... ㄱ-
sleep(1) 이 없을 경우 속도조절을 안합니다.즉 순식간에 일정량
sleep(1) 이 없을 경우 속도조절을 안합니다.
즉 순식간에 일정량이 버퍼에 쌓여서 화면에 보여주는거죠.
버퍼에 쌓지 않는것이 아닌 것입니다.
usleep(100) 정도로 해서 조금 기다리시면 fflush() 없이도 화면에 나오는것을 확인하실 수 있을겁니다.
https://xenosi.de/
댓글 달기