{{위키데이터 속성 추적}}
{{소문자}}
{{C 표준 라이브러리}}
'''stdio.h'''은 Standard Input/Output library (표준입출력 라이브러리)의 약어로써, [[C (프로그래밍 언어)|C 언어의]] [[C 언어 표준 라이브러리|표준 라이브러리]] 함수의 [[매크로 (컴퓨터 과학)|매크로]] 정의, 상수, 여러 형의 입출력 함수가 포함된 헤더 파일이다. 1970년대, 벨 연구소의 [[마크 레스크]]가 쓴 "portable I/O package"<ref>{{서적 인용|last=Kernighan|first=Brian|authorlink=Brian Kernighan|author2=[[Rob Pike]] |title=[[The UNIX Programming Environment]]|publisher=[[Prentice Hall]]|location=[[Englewood Cliffs]]|date=1984|page=[https://archive.org/details/unixprogramminge0000kern/page/200 200]}}</ref>로부터 내려저 왔다. [[C++]]에서는 호환성을 이유로 <code>stdio.h</code> 헤더 파일이 포함되어 있는 것과 마찬가지로 '''cstdio'''도 [[C++ 표준 라이브러리|std]] [[이름공간]]에서 <code>stdio.h</code>의 함수와 형식이 선언되어 있다.

== 예제 ==
라이브러리 함수 (및 변종들)는 [[헤더 파일]]에 정의되어 있다. 그러므로, 프로그래머는 헤더 파일에 정의된 함수를 사용하기 위해 반드시 <code>stdio.h</code> 헤더 파일을 소스 코드에 포함해야 한다.
<syntaxhighlight lang="c">
#include <stdio.h>

int main()
{
    int ch;

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

    putchar('\n');

    return 0;
}
</syntaxhighlight>

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

== 멤버 함수 ==
<code>stdio.h</code>에 선언되어 있는 함수는 일반적으로 파일 조작 함수와 콘솔 입출력 함수 둘로 구분된다.
{| class="wikitable"
|-
! 이름||해설
|-
!colspan=2 |파일 조작 함수
|-
|<code>[[fopen|fopen, freopen]]</code> || 파일을 읽거나 쓴다.
|-
|<code>[[fclose]]</code> || 파일을 닫는다.
|-
|<code>[[remove]]</code> || 파일을 삭제한다.
|-
|<code>[[rename]]</code> || 파일 이름을 바꾼다.
|-
|<code>[[rewind (C)|rewind]]</code> || 파일 위치를 초기화한다.<ref>{{웹 인용|url=http://forum.falinux.com/zbxe/?document_srl=408247|제목=rewind 파일 읽기/쓰기 위치를 처음으로 초기화|출판사=FALINUX Forum}}{{깨진 링크|url=http://forum.falinux.com/zbxe/?document_srl=408247 }}</ref>
|-
|<code>[[tmpfile]]</code> || 임시 파일을 만들고 연다. [[fclose]]()로 닫으면 임시 파일이 삭제된다.
|-
!colspan=2 |콘솔 입출력 함수
|-
|<code>[[clearerr]]</code> || [[end-of-file]]와 주어진 스트림에 대한 오류 지시자를 지운다.
|-
|<code>[[feof]]</code> || [[end-of-file]] 지시자가 주어진 스트림으로 설정되어 있는지 검사한다.
|-
|<code>[[ferror]]</code> || 오류 지시자가 주어진 스트림으로 설정되어 있는지 검사한다.
|-
|<code>[[fflush]]</code> || 보류 중인 버퍼된 '''출력'''을 주어진 스트림의 파일에 강제로 쓴다.
|-
|<code>[[fgetpos]]</code> || 첫 번째 변수 (FILE *)부터 두 번째 변수 (fpos_t *)의 파일 위치 지시자를 저장한다.
|-
|<code>[[fgetc]]</code> || 파일로부터 한 개의 문자를 리턴한다.
|-
|<code>[[fgets]]</code> || 파일로부터 문자열을 읽는다. (파일의 끝이거나 개행 문자의 끝)
|-
|<code>[[fputc]]</code> || 한 문자를 파일에 입력한다.
|-

|-
|<code>[[fseek]]</code> || 파일을 찾는다.
|-
|<code>[[fsetpos]]</code> || 기억된 첫 번째 인수(FILE *) 두 번째 인수(fpos_t *) 까지의 파일 위치 지시자를 설정한다.
|-
|<code>[[fread]]</code> || 파일로부터 데이터를 읽어들인다.
|-
|<code>[[fwrite]]</code> || 파일로부터 데이터를 쓴다.
|-
|<code>[[getc]]</code> || 주어진 스트림으로부터 문자를 읽고 리턴한다. 강화된 파일 지시자로서, 주어진 스트림을 한 번 이상으로 평가하는 [[fgetc]]와 같은 효과를 내는 매크로이다.
|-
|<code>[[getchar]]</code> || [[getc]]([[stdin]])와 같은 효과를 낸다.
|-
|<code>[[gets]]</code> || stdin이 개행문자를 발생시키고 인수에 저장할 때까지 문자를 읽는다.
|-
|<code>[[printf|printf, vprintf]]</code> || 표준 출력 스트림에 출력한다.
|-
|<code>[[fprintf|fprintf, vfprintf]]</code> || 파일로 출력한다.
|-
|<code>[[sprintf|sprintf, snprintf, vsprintf, vsnprintf]]</code> || 문자 배열로 출력한다. ([[C 문자열]])
|-
|<code>[[perror]]</code> || [[stderr]]에 오류 메시지를 쓴다.
|-
|<code>[[putc]]</code> || 스트림에 문자를 쓴다.
|-
|<code>[[putchar|putchar, fputchar]]</code> || [[putc]](stdout)와 같은 효과를 낸다.
|-
|<code>[[scanf|scanf, vscanf]]</code> || 표준 입력 스트림으로 입력한다.
|-
|<code>[[fscanf|fscanf, vfscanf]]</code> || 파일로 입력한다.
|-
|<code>[[sscanf|sscanf, vsscanf]]</code> || 문자 배열로부터 입력한다. (예: [[C 문자열]])
|-
|<code>[[setbuf|setbuf, setvbuf]]</code> || 주어진 스트림에 버퍼링 모드로 전환한다.
|-
|<code>[[tmpnam]]</code> || 임시 파일을 만든다.
|-
|<code>[[ungetc]]</code> || 문자를 스트림의 역순으로 읽는다
|-
|<code>[[puts (C)|puts]]</code> || <code>stdout</code>에 문자, 문자열을 출력한다.
|}

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

== 멤버 변수 ==
{| class="wikitable"
|-
! 이름 !! 해설
|-
|<code>[[표준 스트림#표준 입력 (stdin)|stdin]]</code> || 표준 입력 스트림(일반적으로 키보드)를 참조하는 <code>FILE</code>에 대한 포인터.
|-
|<code>[[표준 스트림#표준 출력 (stdout)|stdout]]</code> || 표준 출력 스트림(일반적으로 디스플레이 터미널)을 참조하는 <code>FILE</code>에 대한 포인터.
|-
|<code>[[표준 스트림#표준 오류 (stderr)|stderr]]</code>  || 표준 오류 스트림(항상 디스플레이 터미널)을 참조하는 <code>FILE</code>에 대한 포인터.
|}

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

== 참고 ==
<references/>

[[분류:Stdio.h|*]]
[[분류:C 표준 라이브러리 헤더]]