Stdio.h

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

stdio.h는 C 표준 라이브러리의 헤더 파일로, 파일 입출력과 콘솔 입출력을 위한 함수, 상수, 자료형을 정의한다. 이 헤더 파일은 파일 조작 함수(fopen, fclose 등)와 콘솔 입출력 함수(printf, scanf 등)를 제공하며, EOF, NULL과 같은 상수, FILE, fpos_t, size_t와 같은 자료형, stdin, stdout, stderr과 같은 표준 스트림을 정의한다. stdio.h에 정의된 함수를 사용하기 위해서는 소스 코드에 해당 헤더 파일을 포함해야 한다.

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_tmpnamtmpnam 함수에 의해 생성된 임시 파일 이름의 최소 길이
SEEK_CURfseek 함수에서 현재 파일 포인터 위치를 기준으로 사용
SEEK_ENDfseek 함수에서 파일의 끝을 기준으로 사용
SEEK_SETfseek 함수에서 파일의 시작을 기준으로 사용
stdin표준 입력 스트림
stdout표준 출력 스트림
stderr표준 에러 스트림
데이터 타입
FILE파일 스트림을 나타내는 구조체
fpos_t파일 내의 위치를 나타내는 데이터 타입
size_tsizeof 연산자의 결과를 저장하는 데 사용되는 부호 없는 정수 타입
주의 사항
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에 선언된 함수들은 크게 파일 조작 함수와 콘솔 입출력 함수로 나뉜다. 파일 조작 함수는 파일을 읽고, 쓰고, 닫고, 삭제하는 등의 기능을 수행하며, 콘솔 입출력 함수는 사용자와 프로그램 간의 상호작용, 즉 키보드 입력 및 화면 출력을 담당한다.

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

2.1. 파일 조작 함수

wikitext

👆
좌우로 밀어서 보기
| 해설
fopen, freopen파일을 읽거나 쓴다.
fclose파일을 닫는다.
remove파일을 삭제한다.
rename파일 이름을 바꾼다.
rewind파일 위치를 초기화한다.
tmpfile임시 파일을 만들고 연다. fclose로 닫으면 임시 파일이 삭제된다.

2.2. 콘솔 입출력 함수

wikitext
콘솔 입출력 함수는 사용자와 프로그램 간의 상호작용을 위한 기능들을 제공한다. 즉, 키보드로부터 입력을 받거나 화면에 텍스트를 출력하는 기능들이다.

👆
좌우로 밀어서 보기
| 해설
clearerrend-of-file와 주어진 스트림에 대한 오류 지시자를 지운다.
feofend-of-file 지시자가 주어진 스트림으로 설정되어 있는지 검사한다.
ferror오류 지시자가 주어진 스트림으로 설정되어 있는지 검사한다.
fflush보류 중인 버퍼된 출력을 주어진 스트림의 파일에 강제로 쓴다.
fgetpos첫 번째 변수 (FILE *)부터 두 번째 변수 (fpos_t *)의 파일 위치 지시자를 저장한다.
fgetc파일로부터 한 개의 문자를 리턴한다.
fgets파일로부터 문자열을 읽는다. (파일의 끝이거나 개행 문자의 끝)
fputc한 문자를 파일에 입력한다.
getc주어진 스트림으로부터 문자를 읽고 리턴한다. 강화된 파일 지시자로서, 주어진 스트림을 한 번 이상으로 평가하는 fgetc와 같은 효과를 내는 매크로이다.
getchargetc(stdin)와 같은 효과를 낸다.
getsstdin이 개행문자를 발생시키고 인수에 저장할 때까지 문자를 읽는다.
printf, vprintf표준 출력 스트림에 출력한다.
fprintf, vfprintf파일로 출력한다.
sprintf, snprintf, vsprintf, vsnprintf문자 배열로 출력한다. (C 문자열)
perrorstderr에 오류 메시지를 쓴다.
putc스트림에 문자를 쓴다.
putchar, fputcharputc(stdout)와 같은 효과를 낸다.
scanf, vscanf표준 입력 스트림으로 입력한다.
fscanf, vfscanf파일로 입력한다.
sscanf, vsscanf문자 배열로부터 입력한다. (예: C 문자열)
setbuf, setvbuf주어진 스트림에 버퍼링 모드로 전환한다.
tmpnam임시 파일을 만든다.
ungetc문자를 스트림의 역순으로 읽는다
putsstdout에 문자, 문자열을 출력한다.

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` 연산자의 결과값을 나타내는 형식의 양의 정수형이다.

6. 예제

c
#include

int main()
{
int ch;

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

putchar('\n');

return 0;
}
```

위 프로그램은 표준 입력(stdin)에서 한 문자씩 읽어 표준 출력(stdout)에 출력한다. 파일 끝(EOF, End-of-File)을 만날 때까지 반복하며, 마지막에 개행 문자를 추가한다.