1. [C 언어] 고수준 파일 입출력
ㅇ 고수준 파일 처리 (High Level File Handling)
- 표준 C 언어를 지원하는 모든 운영체제가 이를 지원
ㅇ 특징
- 파일 포인터 (File Pointer)에 의함
. FILE 구조체에 의해 파일 입출력을 함
- C 언어 표준인, 추상화된 FILE 구조체 사용
. 표준 입출력 라이브러리(Standard I/O Library)로써,
. 파일에 파일 스트림을 연관시킴
. C 언어 라이브러리 (stdio.h)에 선언되어있음
- 직관적이고 사용이 편리한 다양한 함수 형태를 제공 ☞ C 파일 처리 함수 참조
. 例) fopen(),fclose(),fprintf(),fscanf(),fputs(),fgets(),fread() 등
- 버퍼 사용
. 이를, 버퍼링 있는 파일 입출력 (Buffered File I/O) 이라고도 함
. 프로그래머가 버퍼 크기를 일일이 지정해주지 않아도 되며,
. 줄 단위 처리 등이 용이
2. [C 언어] 파일 포인터 (파일 스트림, 스트림 포인터)
ㅇ 파일에 대한 추상화된 정보를 가리키는 포인터
- 파일을, 하드디스크에서 메모리로 읽어들일, `위치 주소`,`크기`,`버퍼링` 등에 대한,
- 추상화된 정보를 가지고 있는 포인터를 말함
ㅇ (유사 명칭)
- 한편, `파일 포인터`는,
- 파일 스트림을 가리키는 포인터이므로,
. (스트림 : 데이터,패킷,비트 등의 일련의 연속성을 갖는 흐름)
- 그냥 `파일 스트림` 또는 `스트림 포인터` 라고도 함
3. [C 언어] 파일 포인터의 규칙
ㅇ `파일 구조체` : FILE
- FILE 이라는 이름의, 파일 구조체에 대한 자료형
. (구조체 : 1 이상의 다른 데이터형을 갖는 변수들을 모아둔 집합체)
- stdio.h 헤더파일에 정의됨
- 파일 포인터의 `자료형` 키워드
ㅇ `파일 포인터` : FILE *
- 파일 스트림을 다루기 위한, 일종의 버퍼를 가리키는, 포인터
ㅇ 파일 포인터의 `선언 방법`
- FILE *파일포인터변수명
* 例) FILE *fp = fopen(파일 이름, 파일 모드);
ㅇ 파일 포인터의 `변수 명` 규칙
- 통상적인 변수명 작성규칙에 따라 만듬
ㅇ 파일 포인터의 `사용 방법`
- 표준 파일 입출력 함수(fopen(),fclose())의 인수에, FILE 포인터를 넘겨주면 됨
4. [C 언어] 3개의 `표준 파일` 및 `표준 파일 포인터`
ㅇ C 언어는, 사용자를 위해 다음 3개 파일을 자동으로 항상 열어둠
- 표준 입력 (stdin) => 키보드
. getchar(),gets(),scanf() 등이 데이터를 읽게되는 파일
- 표준 출력 (stdout) => 디스플레이
. putchar(),puts(),printf() 등이 데이터를 쓰게되는 파일
- 표준 에러 출력 (stderr) => 디스플레이
. 에러 발생시 출력되는 파일
5. [C 언어] fopen(), fclose() 등의 사용 例
#include <stdio.h>
FILE * fopen (const char *path, const char *mode); // 파일 열기
int fclose (FILE *stream); // 스트림 닫기
int fgetc (FILE *stream); // 한 번에 한 문자씩 읽기
char * fgets (char *str, int size, FILE *stream); // 한 줄씩 읽기
ㅇ fopen() : 파일 스트림을 생성하고, 지정된 파일을 오픈하는 함수
- 첫째 매개변수 : 열려고 하는 파일의 경로 및 이름
. 즉, 그 파일명이 있는 문자열의 주소
- 둘째 매개변수 : 파일 모드 (r,w,a,r+,w+,a+ 등)
- 반환 : 파일 포인터(파일 구조체)
- 실패시 : NULL 반환
ㅇ fclose() : 파일 스트림을 닫고, 지정된 파일도 닫는 함수
- 실패시 : EOF 반환
※ 만일, 특정 파일에 문자열을 쓸 때에는,
- 먼저, 파일 사용을 위해, fopen()으로 파일을 열어서, 파일 포인터를 얻고,
- 후에, fprintf()를 써서, 그 파일에 서식을 지정하여 문자열을 쓰고,
- 끝에, fclose()로 파일을 닫음
6. [C 언어] 파일 모드 (파일 오픈 모드)
ㅇ 파일 접근 모드 : r, w, a, r+, w+, a+
- r (읽기 전용, 반드시 파일 있어야 함)
- w (쓰기 전용, 파일 없으면 생성, 파일 있으면 덮어쓰기)
- a (맨뒤 쓰기, 파일 없으면 생성)
- r+ (읽기/쓰기 모두 가능, 반드시 파일 있어야 하고, 없으면 NULL 반환)
- w+ (읽기/쓰기 모두 가능, 파일 없으면 생성, 파일 있으면 덮어쓰기)
- a+ (읽기/맨뒤 쓰기 모두 가능, 파일 없으면 생성)
ㅇ 파일 입출력 모드 : b, t
- b (바이너리)
- t (텍스트, 개행문자 및 파일끝 처리함)