더북(TheBook)

두 표를 보면 스트림은 쓰기 모드뿐만 아니라 읽기 모드로도 열 수 있다. 구체적인 방법은 잠시 후 소개한다. 기본 모드 중 어느 것이 읽기 또는 쓰기 모드로 여는지는 상식적으로 구분할 수 있다. 'a''w'로 지정할 때는 파일 끝을 읽을 수 없는데, 그 지점에는 아무것도 없기 때문이다. 그래서 두 모드로 지정하면 쓰기 상태로 연다. 'r'로 지정하면 파일 내용은 그대로 보존되고 파일의 시작점을 가리키며, 실수로 기존 내용을 덮어쓰는 일은 발생하지 않는다. 따라서 읽기 전용으로 연다.

여기 나온 수정자는 프로그래밍할 때 흔히 쓰는 것은 아니다. '+'가 붙는 업데이트(update) 모드를 사용할 때는 읽기와 쓰기를 동시에 처리하기가 쉽지 않기 때문에 특별히 주의를 기울여야 한다. 'b' 모드와 관련하여 텍스트 스트림과 바이너리 스트림이 어떻게 다른지에 대해서는 14.4절에서 자세히 설명한다.

스트림을 다루는 주요 인터페이스로 freopen, fclose, fflush도 있다.

int fclose(FILE* fp);
int fflush(FILE* stream);

freopenfclose의 용도는 분명하다. freopen은 인수로 지정한 스트림을 다른 파일에 연결하며 모드를 변경한다. 이 함수는 특히 표준 스트림을 파일에 연결하는 데 유용하다. 가령 앞의 예제 프로그램을 다음과 같이 표현할 수도 있다.

int main(int argc, char* argv[argc+1]) {
  if (!freopen("mylog.txt", "a", stdout)) {
    perror("freopen failed");
    return EXIT_FAILURE;
  }
  puts("feeling fine today");
  return EXIT_SUCCESS;
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.