더북(TheBook)

8.3.3 텍스트 IO

텍스트 스트림에 출력할 때 흔히 버퍼C를 사용한다. 실제로 스트림에 쓰는 과정에서 리소스 사용의 효율을 높이기 위해 IO 시스템의 작업을 약간 지연시킨다. fclose로 스트림을 닫으면 모든 버퍼에 담긴 내용을 목적지로 보내서 비운다(flush)C. 출력 내용을 터미널에서 즉시 보고 싶거나 파일을 아직 닫고 싶진 않지만 모든 내용이 원하는 목적지로 제대로 작성됐는지 확인하고 싶다면 fflush 함수를 호출한다. 예제 8-1은 stdout으로 점 10개를 찍는 예를 보여 준다. 매번 쓸 때마다 약 1초 정도 지연된다.Exs 3

 

예제 8-1 버퍼를 사용한 출력 비우기

 1 #include <stdio.h>
 2
 3 /* 간략히 작성한 코드를 지연 실행시키려면
 4 thrd_sleep을 사용해야 한다. */
 5 void delay(double secs) {
 6   double const magic = 4E8; // works just on my machine
 7   unsigned long long const nano = secs * magic;
 8   for (unsigned long volatile count = 0;
 9     count < nano;
10   ++count) {
11     /* 이 부분은 할 일 없음 */
12   }
13 }
14
15 int main(int argc, char* argv[argc+1]) {
16   fputs("waiting 10 seconds for you to stop me", stdout);
17   if (argc < 3) fflush(stdout);
18   for (unsigned i = 0; i < 10; ++i) {
19     fputc('.', stdout);
20     if (argc < 2) fflush(stdout);
21     delay(1.0);
22   }
23   fputs("\n", stdout);
24   fputs("You did ignore me, so bye bye\n", stdout);
25 }

 

 


Exs 3 이 프로그램을 실행할 때 커맨드 라인 인수를 지정하지 않을 때와 한 개만 지정할 때, 두 개를 지정할 때의 동작을 비교해 보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.