검수요청.png검수요청.png

"Stdio.h"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글 (같이보기)
 
(다른 사용자 한 명의 중간 판 3개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''stdio.h'''은 표준입출력 라이브러리(Standard Input/Output library)의 약어로써, C 언어의 표준 라이브러리 함수의 매크로 정의, 상수, 여러 형의 입출력 함수가 포함된 헤더 파일이다.<ref name="stdio.h"> 〈[https://ko.wikipedia.org/wiki/Stdio.h stdio.h]〉, 《위키백과》 </ref>
+
'''stdio.h'''은 표준 입출력 라이브러리(Standard Input/Output library)의 약어로써, C 언어의 표준 라이브러리 함수의 매크로 정의, 상수, 여러 형의 [[입출력]] 함수가 포함된 [[헤더 파일]]이다.<ref name="stdio.h"> 〈[https://ko.wikipedia.org/wiki/Stdio.h stdio.h]〉, 《위키백과》 </ref>
  
 
==개요==
 
==개요==
1970년대, [[벨 연구소]]의 [[마크 레스크]]가 쓴 "portable I/O package"로부터 내려저 왔다. [[C++]]에서는 호환성을 이유로 stdio.h 헤더 파일이 포함되어 있는 것과 마찬가지로 cstdio도 std 이름공간에서 stdio.h의 함수와 형식이 선언되어 있고 라이브러리 함수 (및 변종들)는 헤더 파일에 정의되어 있으므로, 프로그래머는 헤더 파일에 정의된 함수를 사용하기 위해 반드시 stdio.h 헤더 파일을 소스 코드에 포함해야 한다.<ref name="stdio.h"></ref>
+
1970년대, [[벨 연구소]]의 [[마크 레스크]]가 쓴 "가지고 다닐 수 있는 패키지(portable I/O package)"로부터 내려져 왔다. [[C++]]에서는 호환성을 이유로 stdio.h 헤더 파일이 포함되어 있는 것과 마찬가지로 cstdio도 std 이름 공간에서 stdio.h의 함수와 형식이 선언되어 있고 라이브러리 함수 (및 변종들)는 헤더 파일에 정의되어 있으므로, 프로그래머는 헤더 파일에 정의된 함수를 사용하기 위해 반드시 stdio.h 헤더 파일을 소스 코드에 포함해야 한다.<ref name="stdio.h"></ref>
 +
 
 +
==포함==
 +
포함을 나타내는 단어로는 #include이며 예시로 나타내면 다음과 같다.
 +
*예시
 +
#include<stdio.h> : stdio.h라는 곳 안에 아래 내용들을 포함해라.<ref> 마틸, 〈[https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=lucy9211&logNo=220886238182 C언어 기본코드소스 #include, int, main, stdio.h 알아보기 :)]〉, 《티스토리》, 2016-12-14 </ref>
  
 
==헤더파일==
 
==헤더파일==
 
표준 라이브러리 함수 [[printf]]( ), [[scanf]]( )등  이러한 함수들의 동작을 따로 정의해 놓은 파일을 의미한다.<ref> 네트동자, 〈[https://netchobo.tistory.com/2 2번째 헤더파일 stdio.h]〉, 《티스토리》, 2015-04-10 </ref>
 
표준 라이브러리 함수 [[printf]]( ), [[scanf]]( )등  이러한 함수들의 동작을 따로 정의해 놓은 파일을 의미한다.<ref> 네트동자, 〈[https://netchobo.tistory.com/2 2번째 헤더파일 stdio.h]〉, 《티스토리》, 2015-04-10 </ref>
 +
 +
==멤버==
 +
stdio.h에 선언되어 있는 멤버 함수, 상수, 변수, 형식으로 구분된다.
 +
 +
===함수===
 +
stdio.h에 선언되어 있는 함수는 일반적으로 파일 조작 함수와 콘솔 입출력 함수 둘로 구분된다.<ref name="stdio.h"></ref>
 +
 +
===파일 조작===
 +
*[[fopen]], [[freopen]] : 파일을 읽거나 쓴다.
 +
*[[fclose]] : 파일을 닫는다.
 +
*[[remove]] : 파일을 삭제한다.
 +
*[[rename]] : 파일 이름을 바꾼다.
 +
*[[rewind]] : 파일 위치를 초기화한다.
 +
*[[tmpfile]] : 임시 파일을 만들고 연다. fclose()로 닫으면 임시 파일이 삭제된다.<ref name="stdio.h"></ref>
 +
 +
===콘솔 입출력===
 +
*[[clearerr]] : [[EOF]](end-of-file)와 주어진 스트림에 대한 오류 지시자를 지운다.
 +
*[[feof]] : EOF 지시자가 주어진 스트림으로 설정되어 있는지 검사한다.
 +
*[[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에 문자, 문자열을 출력한다.<ref name="stdio.h"></ref>
 +
 +
===상수===
 +
*[[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자)<ref name="stdio.h"></ref>
 +
 +
===변수===
 +
*[[stdin]] : 표준 입력 스트림(일반적으로 키보드)를 참조하는 FILE에 대한 포인터.
 +
*[[stdout]] : 표준 출력 스트림(일반적으로 디스플레이 터미널)을 참조하는 FILE에 대한 포인터.
 +
*[[stderr]] : 표준 오류 스트림(항상 디스플레이 터미널)을 참조하는 FILE에 대한 포인터.<ref name="stdio.h"></ref>
 +
 +
===형식===
 +
stdio.h 헤더에 정의된 데이터 형식이 포함되어 있는데 다음은 그 목록이다.
 +
*FILE - 입출력 작동에 필요한 파일/텍스트 스트림에 대한 정보를 포함하는 구조다.
 +
*파일 서술자
 +
*현재 스트림 위치.
 +
*end-of-file 지시자
 +
*오류 지시자
 +
*적용 가능할 경우, 스트림의 버퍼에 대한 포인터.
 +
*fpos_t - 유일하게 파일의 바이트 위치를 식별할 수 있는 비 배열 형식.
 +
*size_t - sizeof 연산자의 결과값을 나타내는 형식의 양의 정수형.<ref name="stdio.h"></ref>
 +
 +
====파일 서술자====
 +
파일 서술자는 [[입력]](stdin), [[출력]](stdout), [[오류]](stderr)를 나타낸 것이다.<ref> 〈[https://ko.unionpedia.org/i/%ED%8C%8C%EC%9D%BC_%EC%84%9C%EC%88%A0%EC%9E%90 파일 서술자]〉, 《유니온백과》 </ref>
 +
 +
==실행==
 +
C언어와 C++, 자바를 실행한 예시다.
 +
*C언어 예시
 +
 #include<stdio.h>
 +
void main()
 +
{
 +
printf("Hello, World!");
 +
}<ref> moonR25, 〈[https://m.blog.naver.com/ansgml4811/221958227051 (C/C++) 컴파일러의 실행과 출력(stdio.h, printf, \n)]〉, 《네이버 블로그》, 2020-05-12 </ref>
 +
*C++ 예시
 +
#include <iostream>
 +
 +
void main() {
 +
 +
std::cout << "Hello C++ World";
 +
   
 +
    std::cout << std::endl;
 +
 +
}
 +
 +
// 출력 결과 : Hello C++ World
 +
 +
- iostream은 Input/Output Stream의 약자
 +
- 메인은 프로그램의 시작 위치
 +
- cout은 출력을 위한 C++ 언어 함수로 << 연산을 사용하여 출력값을 연결하고, 큰 따옴표 내에 있는 글자를 출력
 +
- endl은 개행을 위한 함수<ref name="실행"> hyeonho, 〈[https://dlagusgh1.tistory.com/350 2번째 헤더파일 stdio.h]〉, 《티스토리》, 2020-07-09 </ref>
 +
*자바 예시
 +
public class A {
 +
 +
public static void main(String[] args) {
 +
   
 +
    System.out.print("Hello Java World");
 +
       
 +
    }
 +
}
 +
 +
// 출력 결과 : Hello Java World
 +
 +
- A는 클래스 명으로 파일 이름과 동일해야 한다. (A.java)
 +
- main 함수는 프로그램 시작점
 +
- 큰 따옴표 안에 있는 글자를 출력<ref name="실행"></ref>
 +
위의 예시처럼 stdio.h는 C언어에서만 쓰이고 C++은 iostream으로 자바는 public class으로 쓰이도록 시스템이 다르다.
 +
 +
{{각주}}
  
 
==참고자료==
 
==참고자료==
 +
* 〈[https://ko.wikipedia.org/wiki/Stdio.h stdio.h]〉, 《위키백과》
 +
* 네트동자, 〈[https://netchobo.tistory.com/2 2번째 헤더파일 stdio.h]〉, 《티스토리》, 2015-04-10
 +
* 마틸, 〈[https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=lucy9211&logNo=220886238182 C언어 기본코드소스 #include, int, main, stdio.h 알아보기 :)]〉, 《티스토리》, 2016-12-14
 +
* 〈[https://ko.unionpedia.org/i/%ED%8C%8C%EC%9D%BC_%EC%84%9C%EC%88%A0%EC%9E%90 파일 서술자]〉, 《유니온백과》
 +
* moonR25, 〈[https://m.blog.naver.com/ansgml4811/221958227051 (C/C++) 컴파일러의 실행과 출력(stdio.h, printf, \n)]〉, 《네이버 블로그》, 2020-05-12
 +
 +
==같이 보기==
 +
* [[C언어]]
 +
* [[입출력]]
 +
* [[헤더]]
  
 
{{프로그래밍|검토 필요}}
 
{{프로그래밍|검토 필요}}

2021년 8월 26일 (목) 08:23 기준 최신판

stdio.h은 표준 입출력 라이브러리(Standard Input/Output library)의 약어로써, C 언어의 표준 라이브러리 함수의 매크로 정의, 상수, 여러 형의 입출력 함수가 포함된 헤더 파일이다.[1]

개요[편집]

1970년대, 벨 연구소마크 레스크가 쓴 "가지고 다닐 수 있는 패키지(portable I/O package)"로부터 내려져 왔다. C++에서는 호환성을 이유로 stdio.h 헤더 파일이 포함되어 있는 것과 마찬가지로 cstdio도 std 이름 공간에서 stdio.h의 함수와 형식이 선언되어 있고 라이브러리 함수 (및 변종들)는 헤더 파일에 정의되어 있으므로, 프로그래머는 헤더 파일에 정의된 함수를 사용하기 위해 반드시 stdio.h 헤더 파일을 소스 코드에 포함해야 한다.[1]

포함[편집]

포함을 나타내는 단어로는 #include이며 예시로 나타내면 다음과 같다.

  • 예시
#include<stdio.h> : stdio.h라는 곳 안에 아래 내용들을 포함해라.[2]

헤더파일[편집]

표준 라이브러리 함수 printf( ), scanf( )등 이러한 함수들의 동작을 따로 정의해 놓은 파일을 의미한다.[3]

멤버[편집]

stdio.h에 선언되어 있는 멤버 함수, 상수, 변수, 형식으로 구분된다.

함수[편집]

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

파일 조작[편집]

  • fopen, freopen : 파일을 읽거나 쓴다.
  • fclose : 파일을 닫는다.
  • remove : 파일을 삭제한다.
  • rename : 파일 이름을 바꾼다.
  • rewind : 파일 위치를 초기화한다.
  • tmpfile : 임시 파일을 만들고 연다. fclose()로 닫으면 임시 파일이 삭제된다.[1]

콘솔 입출력[편집]

  • clearerr : EOF(end-of-file)와 주어진 스트림에 대한 오류 지시자를 지운다.
  • feof : EOF 지시자가 주어진 스트림으로 설정되어 있는지 검사한다.
  • 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에 문자, 문자열을 출력한다.[1]

상수[편집]

  • 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자)[1]

변수[편집]

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

형식[편집]

stdio.h 헤더에 정의된 데이터 형식이 포함되어 있는데 다음은 그 목록이다.

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

파일 서술자[편집]

파일 서술자는 입력(stdin), 출력(stdout), 오류(stderr)를 나타낸 것이다.[4]

실행[편집]

C언어와 C++, 자바를 실행한 예시다.

  • C언어 예시

 #include<stdio.h>

void main()
{
printf("Hello, World!");
}[5]
  • C++ 예시
#include <iostream>

void main() {

	std::cout << "Hello C++ World";
    
    std::cout << std::endl;

}

// 출력 결과 : Hello C++ World

- iostream은 Input/Output Stream의 약자
- 메인은 프로그램의 시작 위치
- cout은 출력을 위한 C++ 언어 함수로 << 연산을 사용하여 출력값을 연결하고, 큰 따옴표 내에 있는 글자를 출력
- endl은 개행을 위한 함수[6]
  • 자바 예시
public class A {

	public static void main(String[] args) {
    
    	System.out.print("Hello Java World");
        
    }
}

// 출력 결과 : Hello Java World

- A는 클래스 명으로 파일 이름과 동일해야 한다. (A.java)
- main 함수는 프로그램 시작점
- 큰 따옴표 안에 있는 글자를 출력[6]

위의 예시처럼 stdio.h는 C언어에서만 쓰이고 C++은 iostream으로 자바는 public class으로 쓰이도록 시스템이 다르다.

각주[편집]

  1. 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 stdio.h〉, 《위키백과》
  2. 마틸, 〈C언어 기본코드소스 #include, int, main, stdio.h 알아보기 :)〉, 《티스토리》, 2016-12-14
  3. 네트동자, 〈2번째 헤더파일 stdio.h〉, 《티스토리》, 2015-04-10
  4. 파일 서술자〉, 《유니온백과》
  5. moonR25, 〈(C/C++) 컴파일러의 실행과 출력(stdio.h, printf, \n)〉, 《네이버 블로그》, 2020-05-12
  6. 6.0 6.1 hyeonho, 〈2번째 헤더파일 stdio.h〉, 《티스토리》, 2020-07-09

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 Stdio.h 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.