stdio.h은 Standard Input/Output library (표준입출력 라이브러리)의 약어로써, C 언어의 표준 라이브러리 함수의 매크로 정의, 상수, 여러 형의 입출력 함수가 포함된 헤더 파일이다. 1970년대, 벨 연구소의 마크 레스크가 쓴 "portable I/O package"[1]로부터 내려저 왔다. C++에서는 호환성을 이유로 stdio.h 헤더 파일이 포함되어 있는 것과 마찬가지로 cstdiostd 이름공간에서 stdio.h의 함수와 형식이 선언되어 있다.

예제 편집

라이브러리 함수 (및 변종들)는 헤더 파일에 정의되어 있다. 그러므로, 프로그래머는 헤더 파일에 정의된 함수를 사용하기 위해 반드시 stdio.h 헤더 파일을 소스 코드에 포함해야 한다.

#include <stdio.h>

int main()
{
    int ch;

    while ((ch = getchar()) != EOF)
        putchar(ch);

    putchar('\n');

    return 0;
}

위의 프로그램은 바이트에 의해 바이트로 표준 입력으로 입력하고, 표준 출력으로 출력한다. 그리고 출력의 끝에 개행 문자를 추가한다.

멤버 함수 편집

stdio.h에 선언되어 있는 함수는 일반적으로 파일 조작 함수와 콘솔 입출력 함수 둘로 구분된다.

이름 해설
파일 조작 함수
fopen, freopen 파일을 읽거나 쓴다.
fclose 파일을 닫는다.
remove 파일을 삭제한다.
rename 파일 이름을 바꾼다.
rewind 파일 위치를 초기화한다.[2]
tmpfile 임시 파일을 만들고 연다. fclose()로 닫으면 임시 파일이 삭제된다.
콘솔 입출력 함수
clearerr end-of-file와 주어진 스트림에 대한 오류 지시자를 지운다.
feof end-of-file 지시자가 주어진 스트림으로 설정되어 있는지 검사한다.
ferror 오류 지시자가 주어진 스트림으로 설정되어 있는지 검사한다.
fflush 보류 중인 버퍼된 출력을 주어진 스트림의 파일에 강제로 쓴다.
fgetpos 첫 번째 변수 (FILE *)부터 두 번째 변수 (fpos_t *)의 파일 위치 지시자를 저장한다.
fgetc 파일로부터 한 개의 문자를 리턴한다.
fgets 파일로부터 문자열을 읽는다. (파일의 끝이거나 개행 문자의 끝)
fputc 한 문자를 파일에 입력한다.
fseek 파일을 찾는다.
fsetpos 기억된 첫 번째 인수(FILE *) 두 번째 인수(fpos_t *) 까지의 파일 위치 지시자를 설정한다.
fread 파일로부터 데이터를 읽어들인다.
fwrite 파일로부터 데이터를 쓴다.
getc 주어진 스트림으로부터 문자를 읽고 리턴한다. 강화된 파일 지시자로서, 주어진 스트림을 한 번 이상으로 평가하는 fgetc와 같은 효과를 내는 매크로이다.
getchar getc(stdin)와 같은 효과를 낸다.
gets stdin이 개행문자를 발생시키고 인수에 저장할 때까지 문자를 읽는다.
printf, vprintf 표준 출력 스트림에 출력한다.
fprintf, vfprintf 파일로 출력한다.
sprintf, snprintf, vsprintf, vsnprintf 문자 배열로 출력한다. (C 문자열)
perror stderr에 오류 메시지를 쓴다.
putc 스트림에 문자를 쓴다.
putchar, fputchar putc(stdout)와 같은 효과를 낸다.
scanf, vscanf 표준 입력 스트림으로 입력한다.
fscanf, vfscanf 파일로 입력한다.
sscanf, vsscanf 문자 배열로부터 입력한다. (예: C 문자열)
setbuf, setvbuf 주어진 스트림에 버퍼링 모드로 전환한다.
tmpnam 임시 파일을 만든다.
ungetc 문자를 스트림의 역순으로 읽는다
puts stdout에 문자, 문자열을 출력한다.

멤버 상수 편집

이름 해설
EOF end-of-file 절을 가리키는 용도로 사용되는 int형의 음의 정수.
BUFSIZ setbuf() 함수에 의해 버퍼 크기를 나타내는 정수.
FILENAME_MAX 충분히 열 수 있는 저장 가능한 파일 이름의 char형의 배열 크기.
FOPEN_MAX 동시에 열 수 있는 파일의 개수; 최소 8
_IOFBF "input/output fully buffered"의 약어. 이 정수값은 setvbuf() 함수에 넘겨서 버퍼화된 블록의 스트림을 열기 위해 입출력에 요구한다.
_IOLBF "input/output line buffered"의 약어. 이 정수값은 setvbuf() 함수에 넘겨서 버퍼화된 라인의 스트림을 열기 위해 입출력에 요구한다.
_IONBF "input/output not buffered"의 약어. 이 정수값은 setvbuf() 함수에 넘겨서 버퍼화 되지 않은 것을 스트림을 열기 위해 입출력에 요구한다.
L_tmpnam char 배열이 tmpnam() 함수를 발생시킬 정도의 충분한 크기
NULL 널 포인터의 약어인 매크로 상수. 이 상수는 메모리의 어떤 유효한 위치의 개체도 가리키지 않는 포인터 값이다.
SEEK_CUR fseek() 함수의 요구한 현재 파일 위치의 상대 위치를 나타내는 정수.
SEEK_END fseek() 함수의 요구한 end of file의 상대 위치를 나타내는 정수.
SEEK_SET fseek() 함수의 요구한 파일의 시작점의 상대 위치를 나타내는 정수.
TMP_MAX tmpnam() 함수가 생성가능한 최대 파일명 길이 (최소 25자)

멤버 변수 편집

이름 해설
stdin 표준 입력 스트림(일반적으로 키보드)를 참조하는 FILE에 대한 포인터.
stdout 표준 출력 스트림(일반적으로 디스플레이 터미널)을 참조하는 FILE에 대한 포인터.
stderr 표준 오류 스트림(항상 디스플레이 터미널)을 참조하는 FILE에 대한 포인터.

멤버 형식 편집

stdio.h 헤더에 정의된 데이터 형식이 포함되어 있다:

  • FILE - 입출력 작동에 필요한 파일/텍스트 스트림에 대한 정보를 포함하는 구조다.
    • 파일 서술자
    • 현재 스트림 위치.
    • end-of-file 지시자
    • 오류 지시자
    • 적용 가능할 경우, 스트림의 버퍼에 대한 포인터.
  • fpos_t - 유일하게 파일의 바이트 위치를 식별할 수 있는 비 배열 형식.
  • size_t - sizeof 연산자의 결과값을 나타내는 형식의 양의 정수형.

참고 편집

  1. Kernighan, Brian; Rob Pike (1984). 《The UNIX Programming Environment》. Englewood Cliffs: Prentice Hall. 200쪽. 
  2. “rewind 파일 읽기/쓰기 위치를 처음으로 초기화”. FALINUX Forum. [깨진 링크(과거 내용 찾기)]