[7주차] 파일 입출력
파일 입출력
파일의 구분
파일은 저장방식에 따라 텍스트 파일과 이진 파일로 구분됨.
텍스트 파일은 모든 데이터가 문자열로 변환되어 기록되어 특별한 응용 프로그램 없이 내용을 볼 수 있음.
이진 파일은 데이터를 그대로 저장하기 때문에 저장 공간을 적게 차지하고 읽고 쓰기가 빠름
파일 입출력 기본
C 언어 기본 FILE
구조체 포인터를 선언하여 파일에 접근할 수 있다.
FILE *f;
f = fopen("input.dat", "r");
fclose(f);
FILE은 파일 입출력에 필요한 정보를 담은 구조체로, 각 파일마다 하나의 FILE 구조체 포인터를 연결하여 사용한다.
표준 스트림
표준 입출력 장치도 논리적으로는 파일로 간주한다. 표준 스트림에 대한 FILE 포인터 명은 아래와 같다.
스트림 이름 | 스트림명 | 의미 |
---|---|---|
stdin | 표준 입력 스트림 | 키보드로부터 입력 받음 |
stdout | 표준 출력 스트림 | 모니터로 결과 출력 |
stderr | 표준 오류 출력 스트림 | 모니터로 오류 메시지 출력 |
파일 입출력 절차
fopen() 함수
FILE *fopen(char* filename, char* filemode);
연결할 파일의 이름과 파일 접근 방식을 입력받고, 파일 접근에 성공시 파일 포인터, 실패시 NULL 반환
filemode
파일의 용도에 따라 적합하게 지정해야 함
텍스트 모드 | 이진 모드 | 기능 | 설명 |
---|---|---|---|
r | rb | 읽기 | 파일을 열 수 없으면 NULL |
w | wb | 쓰기 | 파일이 존재하면 이를 삭제하고 새로 생성 |
a | ab | 추가 | 파일이 없는 경우 w와 같고, 존재하면 기존 파일의 마지막 부분에 내용 추가 |
+
기호를 붙이면 수정 모드
파일 입출력 함수
텍스트 파일
처리 단위 | 파일 출력 | 파일 입력 |
---|---|---|
문자 | fgetc() | fputc() |
문자열 | fgets() | fputs() |
지정 형식 | fscanf() | fprint() |
이진 파일
블록 단위로 fread()
, fwrite()
를 사용
fclose() 함수
현재 열린 파일과 FILE 포인터 연결을 해제함. 성공시 0, 실패시 EOFEnd Of File 반환
eof는 feof
함수로 검사할 수 있다.
이진 파일의 입출력
이진 데이터의 특정 구간에 바로 접근하는 임의 접근이 가능
fread()
이진 파일에서 블록의 크기 * 블록 개수 만큼의 데이터를 읽음.
unsigned int fread(void *buf, unsigned int size, unsigned int count FILE *fp);
fp에서 size*count 만큼의 이진 데이터를 읽고 buf에 저장한다.
fwrite()
unsigned int fwrite(const void *buf, unsigned int size, unsigned int count, FILE *fp);
buf의 데이터를 size*count 만큼 fp에 출력.
파일의 임의 접근 처리 방식
파일 위치 지시자를 조작하여 이진 파일의 임의 위치로 바로 접근 가능
fseek()함수
파일 위치 지시자를 지정한 위치로 이동시킴
int fseek(FILE *fp, long int offset, int origin);
origin으로부터 offset만큼 이동함. 음수를 통해 역방향 이동도 가능.
origin 은 아래 상수로 지정함.
이름 | 위치 |
---|---|
SEEK_SET(0) | 파일의 맨 처음 위치 |
SEEK_CUR(1) | 파일에서의 현재 위치 |
SEEK_END(2) | 파일의 맨 끝 위치 |
성공 시 0을 반환함.
ftell()함수
현재 파일 위치 지시자가 가리키는 곳의 위치를 반환하는 함수로, 혀재 위치가 파일 시작 위치로부터 몇 바이트 떨어져 있는지를 알려줌. 오류 시 음수값 반환
long ftell (FILE *fp);
rewind()함수
파일 위치 지시자를 파일의 시작 지점으로 이동시키는 함수.
'학부 수업 > C프로그래밍' 카테고리의 다른 글
[8주차] 전처리기와 분할 컴파일 (0) | 2020.04.10 |
---|---|
[6주차] 연산자 함수, 자료형 심화 (0) | 2020.04.10 |
[5주차] 동적 할당 (0) | 2020.04.10 |
[4주차] 구조체 (0) | 2020.04.10 |
[3주차] 문자열 (0) | 2020.04.10 |
댓글
이 글 공유하기
다른 글
-
[8주차] 전처리기와 분할 컴파일
[8주차] 전처리기와 분할 컴파일
2020.04.10 -
[6주차] 연산자 함수, 자료형 심화
[6주차] 연산자 함수, 자료형 심화
2020.04.10 -
[5주차] 동적 할당
[5주차] 동적 할당
2020.04.10 -
[4주차] 구조체
[4주차] 구조체
2020.04.10