KDONG 2021. 8. 8. 13:51

학습내용

  • 텍스트 파일 입출력
  • 이진 파일 입출력

학습목표

  • 형식화된 데이터를 파일 입출력으로 처리하는 방법을 구현할 수 있다.
  • 이진 파일 입출력 처리의 기본 문법에 대해 설명할 수 있다.

 

텍스트 파일 입출력

1. fscanf

항목 내용
함수원형 int *fscanf( FILE *stream, const char *format, ...);
헤더 stdio.h
 기능 형식화된 문자열을 파일로부터 입력
 매개변수 FILE *stream -> 읽고자 하는 FILE 포인터
const char *format -> 읽어들일 데이터 서식
반환값 읽기에 성공했다면 읽어들인 항목 개수를 반환하고 실패나 오류가 발생하면 -1을 반환
변환문자열 내용
%o 8진 정수 형식으로 입력
%d  10진 정수 형식으로 입력
%ld long형 10진 정수 형식으로 입력
%x 16진 정수 형식으로 입력
%f float형 형식으로 입력
%lf double형 형식으로 입력
%c 문자 형식으로 입력
%s 문자열 형식으로 입력

2. rewind

항목 내용
함수원형 void rewind(FILE *stream);
헤더 stdio.h
 기능 파일의 읽기/쓰기 위치를 파일의 처음 위치로 초기화
 매개변수 FILE *stream -> 대상 파일 스트림
반환값 void

3. fprintf

항목 내용
함수원형 int *fprintf(FILE *stream, const char *format, ...);
헤더 stdio.h
 기능 형식화된 문자열을 파일로 출력
 매개변수 FILE *stream -> 출력하고자 하는 FILE 포인터
const char *format -> 출력할 데이터 서식
반환값 출력에 성공하면 출력한 문자열을 반환하고 실패나 오류가 발생하면 -1을 반환

 - 형식 문자열의 구조

%[*] [width] [{ h | 1 | L }] type

 

이진 파일 입출력

1. fread

항목 내용
함수원형 size_t fread( void *ptr, size_t size, size_t nitems, FILE *stream);
헤더 stdio.h
 기능 이진(Binary) 파일로부터 입력
 매개변수 void *ptr -> 파일 내용을 읽어들일 메모리 포인터
size_t size -> 데이터 하나의 크기
size_t nitems -> 읽을 데이터의 개수
FILE *stream -> 대상 파일 스트리
반환값 읽어들인 데이터 개수를 반환, 오류가 발생하면 -1을 반환

 

2. fwrite

항목 내용
함수원형 size_t fwrite( void *ptr, size_t size, size_t nitems, FILE *stream);
헤더 stdio.h
 기능 파일에 버퍼 내용을 출력
 매개변수 void *ptr -> 파일 내용에 출력할 메모리 포인터
size_t size -> 데이터 하나의 크기
size_t nitems -> 쓰기 할 데이터의 개수
FILE *stream -> 대상 파일 스트리
반환값 출력한 데이터 개수를 반환, 오류가 발생하면 -1을 반환

 

3. fseek

항목 내용
함수원형 int fseek( FILE *stream, long offset, int whence);
헤더 stdio.h
 기능 파일의 읽기/쓰기 위치를 이동
 매개변수 FILE *stream -> 대상 파일 스트림
long offset -> 이동할 바이트 수
int whence -> 시작 시점
반환값 함수 실행이 성공하면 0을 반환, 오류가 발생하면 0이 아닌 값을 반환
whence 설명
SEEK_SET 파일의 시작
SEEK_CUR 현재 읽기/쓰기 포인터 위치
SEEK_END 파일의 끝


4. ftell

항목 내용
함수원형 long ftell( FILE *stream);
헤더 stdio.h
 기능 파일의 읽기/쓰기 위치를 확인
 매개변수 FILE *stream -> 대상 파일 스트림
반환값 읽기/쓰기 위치를 반홖, 오류가 발생하면 -1을 반홖

 

 

학습정리

 

1. 텍스트 파일 입출력

  • 형식화된 문자열을 이용한 파일 입출력은 fscanf, fprintf 를 이용
  •   - int *scanf( FILE *stream, const char *format, ...);
  •   - int *fprintf( FILE *stream, const char *format, ...);
  • rewind는 파일의 읽기/쓰기 위치를 처음 위치로 이동임

 

2. 이진 파일 입출력

  • 이진 파일의 입출력은 fread, fwrite를 이용
  • fseek는 지정한 거리만큼 포인터를 이동
  • ftell은 현재 포인터의 위치를 반환