더북(TheBook)

지금까지는 터미널에 출력하는 방법만 소개했다. 실제로는 실행 결과를 영구 저장장치에 저장하는 일이 많은데, 스트림(stream)C을 추상화한 FILE*이란 타입이 있다. 이처럼 서식을 적용하지 않은 텍스트를 스트림에 출력하는 기능을 일반화한 함수로 fputsfputc가 있다.

int fputc(int c, FILE* stream);
int fputs(char const s[static 1], FILE* stream);

당연한 말이지만 FILE* 타입에 붙은 *는 포인터 타입임을 의미한다. 이에 대한 자세한 설명은 생략하고, 일단 포인터 값이 널(null)인지 검사할 수 있고(TAKEAWAY 6.20), 이를 통해 스트림이 정상인지 검사할 수 있다는 정도만 알고 넘어가자.

FILE이란 식별자는 불투명 타입(opaque type)C을 표현하는데, 이 타입에 대한 자세한 사항은 이 장에서 소개하는 인터페이스 말고는 알 수 없다. FILE은 매크로로 구현됐고 스트림 이름으로 잘못 사용하고 있는 것만 봐도 C가 표준화되기 이전부터 굳어진 관례임을 알 수 있다.

TAKEAWAY 8.8 불투명 타입은 함수 인터페이스로 지정한다.

TAKEAWAY 8.9 불투명 타입의 구현 세부사항에 의존하지 않는다.

특별한 이유가 없다면 출력용 스트림인 stdoutstderr를 사용한다. stdout은 앞에서 간접적으로 사용한 적이 있다. putcharputs는 내부적으로 stdout을 사용하며 기본적으로 터미널에 연결되어 있다. stderr도 마찬가지로 기본적으로 터미널에 연결돼 있는데 속성은 약간 다를 것이다. 어찌됐든 stdoutstderr는 서로 밀접하게 연결돼 있다. 이렇게 두 가지로 제공하는 이유는 ‘정상적인’ 출력(stdout)과 ‘비정상적인’ 출력(stderr)을 구분하기 위해서다.

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