파일 입출력에 관한 system 호출(open, close, write, …)을 사용하여 응용 프로그램을 제작하는 비용을 줄일 수 있게 ANSI C 표준기구에서는 표준 입출력 라이브러리를 제공합니다.
표준 입출력 라이브러리는 C언어 창시자인 데니스리치에 의해 1975년에 만들어졌으며 지금도 거의 개발 초기 모습을 유지하고 있습니다. 표준 입출력 라이브러리는 개발자 편의성과 효율성이 높은 파일 입출력을 제공하기 위해 만들었습니다.
시스템 호출을 이용하여 파일 입출력 작업을 하면 시스템 호출할 때마다 커널을 통해 입출력을 수행하여 시스템 효율이 떨어질 수 있습니다. 표준 입출력 라이브러리를 이용하여 파일 입출력 작업을 하면 파일 스트림 버퍼를 이용하여 시스템 호출 횟수를 줄여줍니다.
예를 들어 write 시스템 호출을 이용하여 1바이트 데이터를 100번 기록한다고 가정하면 커널은 100번의 쓰기 작업을 수행합니다. 반면 표준 입출력 라이브러리의 fwrite 함수를 이용하면 파일 스트림 버퍼에 저장하고 버퍼가 꽉 차거나 버퍼에 개행이 올 때 write 시스템 호출하여 커널에서는 1번의 쓰기 작업을 수행합니다. 물론 표준 입출력 라이브러리에서는 파일 스트림 버퍼를 어떠한 정책에 의해 동작할 것인지 설정할 수 있습니다.
이번 장에서는 표준 입출력 라이브러리에서 파일 스트림을 정의한 FILE 구조체를 살펴보고 다양한 입출력 함수를 살펴봅시다.