728x90
반응형
파일 입/출력
- 보조기억장치의 파일을 이용한 자료의 입/출력
-> *파일처리 함수 이용 - 키보드나 모니터를 통한 자료의 입/출력
-> 표준 입/출력 함수를 이용
파일처리 함수
- 보조기억장치(디스크)에 들어있는 정보들의 모임을 파일이라고 한다
-> 파일을 제어하는 함수
파일
- 보조기억장치에 저장된 데이터들의 모임
- 일련의 바이트(byte)들로 구성
- C프로그램은 운영체제를 통해 파일을 읽거나 쓰게된다
** C언어에서는 컴퓨터와 연결된 모든 장치들을 파일의 범주에 넣어서 처리한다
파일의 구분
- 텍스트 파일(text file)
-> 화면에 구성되는 문자들로 구성된 파일 - 2진 파일(binary file)
-> 텍스트 파일을 포함한 모든 종류의 자료를 다루는 파일
-> 컴파일이 되어있어 기계어에 가까우므로 내용을 이해하거나 인쇄 불가
파일에 대한 자료의 입/출력
파일 입력
- 디스크 상의 특정 위치(파일)에 수록되어 있는 자료를 읽어 기억공간에 수록하는 절차
- 파일 출력
- 기억공간에 있는 자료를 디스크 상의 특정 위치(파일)에 수록하는 절차
** 파일포인터를 사용하여 파일 입/출력 실행
파일 포인터 - 파일 처리를 위해 사용됨
- 파일이 어디에 있는지 가리키는 포인터
- 모든 파일 입/출력 함수는 파일 포인터를 사용
버퍼(buffer) - 파일을 입출력 할 때 사용됨
- 기억공간과 디스크 사이에 존재하는 임시 기억 공간
- 파일 입출력 시 디스크에 저장된 자료를 기억공간으로 읽어들이거나,
기억공간에서 처리된 자료를 디스크에 저장 시 사용
** 컴퓨터의 전자적 장치와 디스크의 물리적 장치가 동작하는 사이에 존재하는 속도 차이를 조절해줌
(잠시 보관해놓았다가 완전히 옮겨졌을 때 버퍼의 내용을 삭제하는)
파일포인터를 이용한 파일 입/출력
자료의 입/출력 개념
- 프로그램과 입/출력 장치(콘솔, 파일, 소켓 등)사이에 이루어지는 자료의 입/출력
- 자료의 입/출력을 위한 논리적 통로가 필요함 -> 스트림이라고 부른다
스트림
자료의 입/출력을 위해 스트림 필요
- 표준 입출력장치를 이용한 자료 입/출력
-> 표준 입출력장치와의 스트림은 프로그램 실행 시 자동 생성/종료 시 자동 소멸됨
-> printf() 등의 함수를 사용할 때 스트림이 생성되었다가 출력 후 사라짐
** 파일을 이용한 자료 입출력 시에는 스트림을 프로그램으로 직접 생성과 소멸시켜줘야함
파일 입/출력의 수행 과정
- 파일 열기 -> 입/출력 수행 -> 파일 닫기
- 파일 열기: fopen()함수를 통해 스트림 생성 (파일과 자료를 주고받을 수 있는 통로)
- 파일 닫기: fclose()함수를 통해 생성된 스트림 소멸
** 스트림의 생성
- 파일과 프로그램의 통로(논리적 접속)를 구성
- 통로 역할을 파일 포인터가 수행한다
파일 입/출력 프로그램 구조
- 파일 포인터 선언 -> 파일 열기 -> 읽기/쓰기 -> 파일 닫기
- 파일 포인터 선언: FILE *fp; - 파일을 가리키는 포인터 변수 선언
- 파일 열기: fp = fopen("파일명", "모드"); - 파일을 지정한 모드로 열고 fp가 파일을 가리키게 한다
- 읽기/쓰기: 입/출력 수행 - 파일처리함수와 fp를 이용하여 입/출력 수행
- 파일 닫기: fclose(fp) - 버퍼를 비우고 fp가 가리키는 파일을 닫는다
** 파일 입출력은 파이썬과 유사하다
파일 입력
#include <stdio.h>
int main(void){
char ch;
FILE *fp;
fp = fopen("sample2.txt","w");
for(ch='A'; ch<='Z'; ch++){
fputc(ch, fp);
}
fclose(fp);
}
파일처리함수와 기능
파일포인터의 선언
- 파일 입/출력을 위해 맨 처음 파일포인터를 선언
- 파일 포인터는 실제 파일과 프로그램을 연결해주는 통로
- 형식: FILE *변수명;
- 사용 예: FILE *fp; // 파일형 포인터변수 선언
파일포인터 변수와 버퍼의 관계
FILE *fa, *fb // FILE형: 구조체형 , FILE형 포인터변수: 파일에 대한 정보를 가진 변수
** 파일포인터가 선언되었다는 것은 스트림(통로)이 연결되었다는 뜻이다
-> fopen() 함수에 의해 실제 파일과 연결된다
파일 열기
- 프로그램과 디스크 상의 파일 사이에 데이터가 입/출력될 수 있도록 통로를 만들어주는 것
- 형식: fopen("파일명.확장자", "사용모드);
- 사용 예: fp = fopen("sample.txt", "r")
사용모드(개방모드) = 파일 접근 모드 + 입출력 모드
-> 파일 접근 모드: r, w, a (읽기, 쓰기, 추가)
-> 데이터 입출력 모드: t, b
t : text mode
- 프로그램에서 파일로 자료를 입출력 시 변환이 일어나는 입출력 모드 (문자 변환 필요 \n <-> CR/LF)
b : binary mode
- 변환이 일어나지 않는 입출력 모드 (문자 변환 불필요)
fopen() 함수
- 입/출력이 정상이면 지정된 파일포인터에 시작 주소값을 리턴
- 파일이 개방되지 않을 때는 에러(NULL)값을 리턴
b가 붙은 것은 binary모드(2진 모드)
w -> 쓰기 모드(텍스트 모드 출력 개방)
rt -> 읽기 모드 (텍스트 모드 입력 개방)
** fopen() 함수 사용 시 파일 open에 실패할 경우를 고려하여 강제 종료를 해준다
if((fp = fopen("파일명.확장자", "사용모드)) == NULL){
puts("파일을 열 수 없음);
exit(1); // 프로그램 종료
}
파일 닫기
- 형식 : fclose(파일포인터 변수);
- 사용 예 : fclose(fp);
fclose() 함수
- 개방된 통로와 버퍼를 원 상태로 환원
- 쓰기의 경우 파일 끝에 EOF (End Of File)신호를 부가 (완전한 파일로 완성됨을 나타낸다)
파일 : 정보의 집합
- 파일은 레코드 단위로 구성
레코드
- 파일 입출력 처리에 사용되는 논리적인 기본 단위
- 각 레코드들은 필드(field)로 구성
- 파일 처리함수를 이용하여 파일 편성하는 방법에 따라 순차 파일과 랜덤 파일로 나뉜다
순차 파일(sequential file)
- 레코드의 길이가 일정하지 않은 파일
- 파일의 처음부터 차례로 읽고, 기록하는 파일
랜덤 파일(random file)
- 레코드의 길이가 일정한 파일
- 파일 임의의 위치에서 자료를 읽고, 기록하는 파일
** 순차파일과 랜덤파일의 자료 처리가 조금 다르다
순차파일에서의 레코드 구성
- 레코드의 길이가 일정하지 않기 때문에 레코드들의 구분이 필요 (CR/LF를 사용하여 구분)
-> 텍스트 파일의 구분자를 말하는 것 같다 (csv : 쉼표로 구분, \t, \n 등)
순차파일 출력함수
- 만들어진 파일에 자료를 기록하는 함수
putc(), fputc(), fputs, fprintf()
순차파일 입력함수
getc(), fgetc(), fgets(), fscanf()
반응형
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어) 15. 메모리 동적 할당 (0) | 2021.04.07 |
---|---|
C언어) 파일처리함수(2) (0) | 2021.04.03 |
C언어 - 구조체와 공용체(2) (0) | 2021.03.23 |
C언어 - 11. 구조체와 공용체 (0) | 2021.03.21 |
C언어 - 10. 배열과 포인터 (3) (0) | 2021.03.17 |
댓글