Stdio.h
1. 개요
stdio.h는 C 표준 라이브러리의 헤더 파일로, 파일 입출력과 콘솔 입출력을 위한 함수, 상수, 자료형을 정의한다. 이 헤더 파일은 파일 조작 함수(fopen, fclose 등)와 콘솔 입출력 함수(printf, scanf 등)를 제공하며, EOF, NULL과 같은 상수, FILE, fpos_t, size_t와 같은 자료형, stdin, stdout, stderr과 같은 표준 스트림을 정의한다. stdio.h에 정의된 함수를 사용하기 위해서는 소스 코드에 해당 헤더 파일을 포함해야 한다.
| 헤더 파일 | stdio.h |
|---|---|
| 표준 | ANSI C, POSIX |
| 설명 | 표준 입출력 (Standard Input/Output) 라이브러리 함수들을 포함하는 헤더 파일이다. |
| 스트림 I/O | 파일 또는 다른 스트림 기반 데이터 소스에서 데이터를 읽고 쓰는 함수들을 제공한다. |
|---|---|
| 형식화된 I/O | 특정 형식에 따라 데이터를 읽고 쓰는 함수들을 제공한다 (예: printf, scanf). |
| 파일 I/O | 파일을 열고 닫고, 파일 내에서 위치를 변경하는 함수들을 제공한다. |
| 오류 처리 | I/O 작업 중 발생한 오류를 처리하는 함수들을 제공한다. |
| 입력 함수 | getchar: 표준 입력 스트림에서 문자 하나를 읽는다. gets: 표준 입력 스트림에서 문자열을 읽는다. (보안 문제로 사용 권장되지 않음) scanf: 형식화된 데이터를 표준 입력 스트림에서 읽는다. fopen: 파일을 연다. fread: 파일에서 데이터를 읽는다. fgetc: 파일에서 문자 하나를 읽는다. fgets: 파일에서 문자열을 읽는다. |
|---|---|
| 출력 함수 | putchar: 표준 출력 스트림에 문자 하나를 쓴다. puts: 표준 출력 스트림에 문자열을 쓴다. printf: 형식화된 데이터를 표준 출력 스트림에 쓴다. fprintf: 형식화된 데이터를 파일에 쓴다. fputc: 파일에 문자 하나를 쓴다. fputs: 파일에 문자열을 쓴다. |
| 파일 위치 함수 | fseek: 파일 내에서 현재 위치를 변경한다. ftell: 파일 내에서 현재 위치를 반환한다. rewind: 파일 위치 지정자를 파일의 시작으로 되돌린다. |
| 오류 처리 함수 | feof: 스트림의 끝에 도달했는지 확인한다. ferror: 스트림에서 오류가 발생했는지 확인한다. perror: 오류 메시지를 표준 오류 스트림에 출력한다. |
| 기타 함수 | fclose: 파일을 닫는다. fflush: 스트림의 버퍼를 비운다. remove: 파일을 삭제한다. rename: 파일 이름을 변경한다. tmpfile: 임시 파일을 만든다. tmpnam: 임시 파일 이름을 생성한다. |
| NULL | 널 포인터 |
|---|---|
| EOF | 파일의 끝 (End-of-File) |
| FOPEN_MAX | 동시에 열 수 있는 최대 파일 수 |
| FILENAME_MAX | 파일 이름의 최대 길이 |
| L_tmpnam | tmpnam 함수에 의해 생성된 임시 파일 이름의 최소 길이 |
| SEEK_CUR | fseek 함수에서 현재 파일 포인터 위치를 기준으로 사용 |
| SEEK_END | fseek 함수에서 파일의 끝을 기준으로 사용 |
| SEEK_SET | fseek 함수에서 파일의 시작을 기준으로 사용 |
| stdin | 표준 입력 스트림 |
| stdout | 표준 출력 스트림 |
| stderr | 표준 에러 스트림 |
| FILE | 파일 스트림을 나타내는 구조체 |
|---|---|
| fpos_t | 파일 내의 위치를 나타내는 데이터 타입 |
| size_t | sizeof 연산자의 결과를 저장하는 데 사용되는 부호 없는 정수 타입 |
| gets 함수 | gets 함수는 버퍼 오버플로우에 취약하므로 사용이 권장되지 않는다. fgets 함수를 대신 사용하는 것이 좋다. |
|---|
-
Stdio.h -
Printf
printf는 다양한 프로그래밍 언어에서 형식 지정자를 사용하여 출력 형식을 제어하는 함수이며, 보안 취약점에도 불구하고 C/C++ 기반 시스템 프로그래밍 및 웹 개발에서 널리 사용된다. -
Stdio.h -
Scanf
`scanf`는 C 언어에서 표준 입력을 통해 데이터를 입력받는 함수로, `stdio.h`에 포함되어 있으며 다양한 형식 지정자를 통해 여러 형태의 데이터를 입력받을 수 있지만, 보안 취약점에 유의해야 하고, 관련 함수로 `fscanf`와 `sscanf`가 있다. -
C 표준 라이브러리 헤더 -
Errno.h
errno.h는 POSIX 표준 오류 값과 추가 매크로를 정의하며, GNU C 라이브러리는 strerror 함수를 통해 각 오류에 대한 설명을 제공한다. -
C 표준 라이브러리 헤더 -
Stdlib.h
`stdlib.h`는 C 표준 라이브러리의 헤더 파일로서 문자열 변환, 의사 난수 생성, 동적 메모리 관리, 프로세스 제어, 검색/정렬, 정수 산술 연산과 관련된 함수들을 정의하며 C 프로그래밍의 기본적인 기능 구현에 필수적이다.
2. 멤버 함수
stdio.h에 선언된 함수들은 크게 파일 조작 함수와 콘솔 입출력 함수로 나뉜다. 파일 조작 함수는 파일을 읽고, 쓰고, 닫고, 삭제하는 등의 기능을 수행하며, 콘솔 입출력 함수는 사용자와 프로그램 간의 상호작용, 즉 키보드 입력 및 화면 출력을 담당한다.
2.1. 파일 조작 함수
wikitext
2.2. 콘솔 입출력 함수
wikitext
콘솔 입출력 함수는 사용자와 프로그램 간의 상호작용을 위한 기능들을 제공한다. 즉, 키보드로부터 입력을 받거나 화면에 텍스트를 출력하는 기능들이다.
| | 해설 | |
|---|---|
clearerr | end-of-file와 주어진 스트림에 대한 오류 지시자를 지운다. |
feof | end-of-file 지시자가 주어진 스트림으로 설정되어 있는지 검사한다. |
ferror | 오류 지시자가 주어진 스트림으로 설정되어 있는지 검사한다. |
fflush | 보류 중인 버퍼된 출력을 주어진 스트림의 파일에 강제로 쓴다. |
fgetpos | 첫 번째 변수 (FILE *)부터 두 번째 변수 (fpos_t *)의 파일 위치 지시자를 저장한다. |
fgetc | 파일로부터 한 개의 문자를 리턴한다. |
fgets | 파일로부터 문자열을 읽는다. (파일의 끝이거나 개행 문자의 끝) |
fputc | 한 문자를 파일에 입력한다. |
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에 문자, 문자열을 출력한다. |
3. 멤버 상수
| 이름 | 해설 |
|---|---|
| EOF | 파일 끝(end-of-file)을 나타내는 데 사용되는 음의 정수이다. |
| 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 | `tmpnam()` 함수로 생성할 수 있는 `char` 배열의 충분한 크기이다. |
| NULL | 널 포인터를 나타내는 매크로 상수이다. 메모리의 어떤 유효한 위치의 객체도 가리키지 않는 포인터 값이다. |
| SEEK_CUR | `fseek()` 함수에서 현재 파일 위치를 기준으로 상대 위치를 나타내는 정수이다. |
| SEEK_END | `fseek()` 함수에서 파일의 끝(end of file)을 기준으로 상대 위치를 나타내는 정수이다. |
| SEEK_SET | `fseek()` 함수에서 파일의 시작점을 기준으로 상대 위치를 나타내는 정수이다. |
| TMP_MAX | `tmpnam()` 함수가 생성할 수 있는 최대 파일 이름의 길이이다. (최소 25자) |
4. 멤버 변수
| 이름 | 해설 |
|---|---|
| stdin | 표준 입력 스트림(일반적으로 키보드)을 참조하는 `FILE`에 대한 포인터. |
| stdout | 표준 출력 스트림(일반적으로 디스플레이 터미널)을 참조하는 `FILE`에 대한 포인터. |
| stderr | 표준 오류 스트림(항상 디스플레이 터미널)을 참조하는 `FILE`에 대한 포인터. |
5. 멤버 형식
* FILE - 입출력 작동에 필요한 파일/텍스트 스트림에 대한 정보를 포함하는 구조체이다.
파일 서술자
현재 스트림 위치
end-of-file 지시자
오류 지시자
** 적용 가능할 경우, 스트림의 버퍼에 대한 포인터
* fpos_t - 파일의 바이트 위치를 유일하게 식별할 수 있는 비 배열 형식이다.
* size_t - `sizeof` 연산자의 결과값을 나타내는 형식의 양의 정수형이다.