C의 입출력 기능은 현대의 표준의 기준으로 하면 상당이 낮은 수준이다. C는 입력 스트림이나 출력 스트림과 같은 파일에 대한 모든 작업들을 바이트 단위의 흐름으로 추상화한다. 과거의 다른 프로그래밍 언어와는 달리 C는 데이터 파일에 임의 액세스를 하는 기능을 제공하지 않고 대신, 파일 매체 저장소를 읽기 위해 프로그래머가 스트림을 생성해줘야 한다. 파일 매체를 찾고, 스트림에서 바이트 단위로 연속으로 읽는다.
파일 입출력의 스트림 모델은 C 프로그래밍 언어가 개발되었을 때 같이 개발되던 유닉스를 통해 대중화되었다. 수많은 현대 운영체제는 유닉스로부터 스트림을 물려받았으며, C 프로그래밍 언어군의 많은 언어들도 C의 파일 입출력 인터페이스를 약간의 수정을 거쳐 물려받았다. (예시 - PHP).
개요
기능
C 파일 입출력 기능의 대부분은 C 표준 라이브러리헤더 파일<stdio.h> 에 정의되어 있다. (C++의 경우 표준 C 기능을 포함한 헤더 cstdio에 있으며 std 이름공간을 포함해야 함.)
POSIX 표준은 메모리를 할당하는 readline 함수와, FILE 객체와 파일 식별자간 링크를 만드는 fileno, fdopen 함수와, 메모리 내 버퍼를 가리키는 FILE 객체를 생성하는 함수 그룹 등 stdio 기능들로
구성된 몇가지 확장 기능을 정의한다.[4]
예시
아래 C 프로그램은 'myfile'이라는 바이너리 파일을 열고 파일 안의 다섯 바이트를 읽고 파일을 닫는 과정을 거친다.
#include<stdio.h>#include<stdlib.h>intmain(void){charbuffer[5]={0};/* 초기화 */inti;FILE*fp=fopen("myfile","rb");if(fp==NULL){perror("파일 열기 실패. \"myfile\"");returnEXIT_FAILURE;}for(i=0;i<5;i++){intrc=getc(fp);if(rc==EOF){fputs("읽는 도중 에러 발생.\n",stderr);returnEXIT_FAILURE;}buffer[i]=rc;}fclose(fp);printf("파일에는 다음과 같은 글자들이 있습니다. %x %x %x %x %x\n",buffer[0],buffer[1],buffer[2],buffer[3],buffer[4]);returnEXIT_SUCCESS;}