파일 처리 함수 - 1
자료의 입출력 개념과 파일 입출력의 개념. 파일 포인터와 순차파일.
- 학습 목표
- 파일을 이용한 자료의 입출력 이해.
- 파일 입출력의 수행과정 이해.
- 파일 포인터를 이용한 자료의 입출력 수행.
- 순차파일의 개념 이해.
주요 용어
- 스트림(stream) : 자료의 입출력을 위한 논리적인 통로.
- 파일 포인터 : 파일이 어디 있는지를 가리키는 포인터.
- 순차파일 : 파일의 처음에서부터 자료를 차례로 읽고, 기록하는 파일.
- 랜덤파일 : 파일의 임의의 위치에서 자료를 읽고, 기록하는 파일.
파일 입출력의 개념
- 보조기억장치의 파일을 이용한 자료의 입출력.
- 파일 처리함수를 이용.
- 표준입출력 -> 키보드나 모니터를 통한 입출력.
- 파일 처리 함수.
- 보조기억장치에 들어있는 정보들의 모임을 파일이라 하고, 이러한 파일을 제어하는 함수.
파일
- 보조기억장치에 저장된 데이터들의 모임.
- 일련의 byte들로 구성.
- C 프로그램은 운영체제를 통해서 파일을 읽거나 씀.
- C 언어에서는 컴퓨터와 연결된 장치들 까지도 모두 파일의 범주에 넣어 처리.
파일 구분
- 텍스트 파일(text file)
- 화면에 출력되는 문자들로 구성된 파일.
- 2진 파일(binary file)
- 텍스트 파일을 포함한 모든 종류의 자료를 다루는 파일.
- 컴파일 되어 있어 기계어에 가까우므로 내용을 이해하거나 인쇄 불가능.
파일에 대한 자료의 입출력
- 파일 입력
- 디스크 상의 특정 위치(파일)에 수록되어 있는 자료를 읽어들여 기억공간에 수록하는 절차.
- 파일 출력
- 기억공간에 있는 자료를 디스크상의 특정위치(파일)에 수록하는 절차.
- 파일포인터를 사용하여 파일 입출력 수행.
파일처리를 위해서는 파일포인터를 사용
- 파일포인터
- 파일이 어디에 있는지를 가리키는 포인터.
- 모든 파일 입출력 함수는 파일 포인터를 사용
파일을 입출력 할 때 버퍼(buffer) 사용
- 기억공간과 디스크 사이에 존재하는 임시 기억 공간.
- 사용
- 파일 입출력 시 디스크에 저장된 자료를 기억공간으로 읽어 들일 때.
- 기억 공간에서 처리된 자료를 디스크에 저장할 때.
파일포인터를 이용한 파일 입출력
자료의 입출력 개념
- 프로그램과 입출력 장치(콘솔, 파일, 소켓등)와의 사잉에 이루어 지는 자료의 입력과 출력.
- 자료의 입출력을 위한 논리넉인 통로 : 스트림
스트림 (stream)
- 표준 입출력장치를 이용한 자료 입출력.
- 표준 입출력장치와의 스트림은 프로그램 실행/종료 시
자동으로 생성/소멸 됨.
- 표준 입출력장치와의 스트림은 프로그램 실행/종료 시
- 파일 입출력을 위한 스트림은 프로그램을 통해 생성/소멸 시켜주어야 함.
파일 입출력의 수행 과정
-
과정
- 파일을 연다.
- 파일과 자료를 주고 받을 수 있는 스트림을 생성(fopen() 사용).
- 입출력을 수행한다.
- 파일을 닫는다.
- 파일을 연다.
-
생성된 스트림을 소멸시키기 위한 과정(fclose() 사용).
스트림(stream)의 생성
- 파일과 프로그램과의 통로(논리적인 접속)를 구성.
- 통로 역할을 파일포인터가 수행.
파일입출력 프로그램 구조
// 파일을 가리키는 파일포인터 선언.
FILE *fp;
// 파일 열기 : 지정한 모드로 열고, fp로 하여금 파일을 가리키게 함.
fp = fopen("파일명", "모드");
// 입출력 수행 : 파일처리함수와 fp를 이용하여 입출력 수행.
...
// 파일 닫기 : 버퍼를 비우고 fp가 가리키는 파일을 닫음.
fclose(fp);
#include <stdio.h>
void main() {
char ch;
FILE *fp;
fp = fopen("file_IO_test.txt", "W");
for (ch = 'A'; ch <= 'Z'; ch++)
fputc(ch, fp);
fclose(fp);
}
파일처리 함수와 기능
function | desc |
---|---|
fopen("filename", "mode") | 파일을 지정된 모드로 열기 |
fclose() | 파일 닫기 |
fget(), getc() | 파일로부터 한 문자 읽기 |
fputc(), putc() | 파일에 한 문자 쓰기 |
fgets() | 파일로부터 문자열 읽기 |
fputs() | 파일에 문자열 쓰기 |
fscanf() | 파일로 부터 정해진 형식에 따라 읽기 |
fprintf() | 파일에 정해진 형식에 따라 쓰기 |
fread() | 파일로부터 정해진 크기의 자료를 정해진 개수만큼 읽기 |
fwrite() | 파일에 정해진 크기의 자료를 정해진 개수만큼 쓰기 |
fseek() | 파일에서 입출력 위치 이동 |
feof() | 파일의 끝인가를 판별 |
ferror() | 파일의 입출력 시 에러 발생 유무 조사 |
파일포인터 선언과 파일 열기
파일포인터 선언
- 파일 입출력을 위해 파일포인터 선언.
- 실제 파일과 프로그램을 연결해주는 통로가 됨.
- 형식 : FILE *변수명;
- 사용 예 : FILE *fp;
- 기능 : 파일형 포인터변수를 선언.
파일포인터 변수와 버퍼의 관계
- FILE형 : 구조체형.
- FILE형 포인터 변수 : 파일에 대한 여러가지 정보를 가진 변수.
파일 열기 : fopen()
프로그램과 디스크 상의 파일 사이에 데이터가 입출력할 수 있도록 통로를 만들어 주는 것.
- 형식 : fopen("파일명", "사용모드");
- 사용 예 : fp = fopen("test.dat", "r");
- 기능 : 파일을 열어 사용할 수 있게 함.
- 입출력이 정상이면 지정된 파일의 파일포인터에 시작주소 값을 리턴.
- 파일이 개방되지 않을 때는 에러 값(NULL값) 리턴.
- 파일 명
- 경로를 포함 할수도 안 할 수도 있다?
- 사용 모드
- 개방한 파일의 용도를 결정.
- 자료의 입출력 방식을 의미
- 사용(개방)모드 = 파일 접근 모드 + 데이터 입출력 모드.
- r, r+ : 읽기
- w, w+ : 쓰기
- a, a+ : 추가
- t : 텍스트 모드(text mode)
- 기본 값.
- 프로그램에서 파일로 자료를 입출력할 때 변환이 일어나는 입출력 모드.
- 문자 변환이 필요(\n -> CR/LF).
- b : 2진 모드(bianry mode)
- 변환이 일어나지 않는 입출력 모드.
- 문자 변환 불필요.
사용 모드 | 의미 | 파일이 있을 경우 | 파일이 없을 경우 |
---|---|---|---|
r, rb | 읽기 | 정상처리 | NULL |
r+, rb+ | 읽기/쓰기 | 정상처리 | NULL |
w, wb | 쓰기 | 이전 내용 삭제 | 새 파일 생성 |
w+, wb+ | 읽기/쓰기 | 이전 내용 삭제 | 새 파일 생성 |
a, ab | 추가 | 이전 내용 뒤에 추가 | 새 파일 생성 |
a+, ab+ | 읽기/추가 | 이전 내용 뒤에 추가 | 새 파일 생성 |
fopen("filename", "w") // 텍스트 출력 모드
fopen("filename", "rt") // 텍스트 입력 모드
fopen("filename", "wb") // 2진 출력 모드
fopen("filename", "rb+") // 2인 입력 모드
파일 닫기 fclose()
- 형식 : fclose(파일포인터 변수);
- 사용 예 : fclose(fp);
- 기능 : 열었던 파일을 닫고, fp 해제.
- 개방된 통로와 버퍼를 원 상태로 환원.
- 쓰기의 경우 파일 끝에 EOF(End Of File) 신호 부가(완전한 파일로 완성됨).
파일 열기와 닫기 사용 예
FILE *fp1, fp2;
// a파일을 쓰기용으로 열어 그 시작주소를 파일포인터 fp1에게 부여.
fp1 = fopen("a", "w");
fp2 = fopen("b", "r");
// 파일 open이 안된 경우 종료 해야 함.
if( (fp = fopen("filename", "r") ) == NULL ) {
exit(1); // 프로그램 종료
}
// 열었던 파일을 닫고 파일포인터 해제.
fclose(fp1);
fclose(fp2);
순차파일처리
정보의 집합 => 파일 => 레코드 단위 구성
- 레코드
- 파일 입출력 처리에 사용되는 논리적인 기본 단위.
- 각 레코드들은 필드(field)들로 구성.
파일 처리 함수를 이용하여 파일을 편성하는 방법에 따라 순차파일, 랜덤파일로 구분.
파일의 종류
순차 파일 (sequential file)
- 파일의 처음부터 자료를 차례로 읽고, 기록하는 파일.
- 레코드의 길이가 일정하지 않은 파일.
랜덤 파일 (random file)
- 파일의 임의의 위치에서 자료를 읽고, 기록하는 파일.
- 레코드의 길이가 일정한 파일.
순차파일에서 레코드 구성
순차파일은 레코드의 길이가 일정하지 않기 때문에 레코드들의 구분이 필요 : CR/LF를 사용하여 구뷴
순차파일 출력함수
만들어진 파일에 자료를 기록하는 함수.
- putc(), fputc(), fputs(), fprintf()
- 순차파일 출력함수
- getc(), fgetc(), fgets(), fscanf()
728x90
반응형
'Language > C' 카테고리의 다른 글
[C] 메모리 동적 할당 (0) | 2021.01.03 |
---|---|
[C] 파일 처리 함수 - 2 (0) | 2021.01.02 |
[C] 구조체와 공용체 - 2 (0) | 2021.01.01 |
[C] 구조체와 공용체 -1 (0) | 2020.12.27 |
[C] 배열과 포인터 - 3 (0) | 2020.12.27 |