Taking baby-developer steps

17.파일 입출력 - 파일 입출력의 필요성 / 파일 열고 닫기 / 파일 입출력 함수 / 파일 입출력의 과정 / 파일 열어 문자열 쓰기 본문

CS 지식/C언어_basic

17.파일 입출력 - 파일 입출력의 필요성 / 파일 열고 닫기 / 파일 입출력 함수 / 파일 입출력의 과정 / 파일 열어 문자열 쓰기

Surin Lee 2021. 4. 1. 16:45

파일 입출력

소프트웨어에서 파일 입출력이 필요한 이유에 대해 이해하고, C언어를 이용해 파일 입출력 하는 방법을 학습한다.

 

파일 입출력의 필요성

프로그램이 꺼진 이후에도 데이터를 저장하기 위해서는 파일 입출력이 필요하다.ex> 게임을 껐다 킬 때마다 다시 처음부터 캐릭터를 키워야 한다면 고객이 이용하지 않을 것.

 

파일이 실질적으로 저장되는 위치

파일이 실질적으로 저장되는 위치는 SSD와 같은 보조기억장치라고 할 수 있다. Ram이나 CPU는 일반적으로, 특정한 데이터를 영구적으로 가지고 있지는 않는다.(이를 휘발성 있게 저장 된다고 말한다.) 보조 기억장치에 저장된 파일을 실행하면, 해당 프로그램이 프로세스로 변환되며 Ram에 들어가서 구동된다. 그 후 CPU가 Ram에서 구동된 코드를 하나하나 읽어서 실행을 시킨다.

 

파일을 열고 닫기

파일 입출력 변수는 FILE형식의 포인터 변수로 선언한다.

파일을 열때는 fopen()함수를 이용한다.
파일을 닫을 때는 fclose()함수를 이용한다.
FILE *fp;
fp = fopen(파일 경로, 접근 방식);
//파일 관련 처리
fclose(fp);

파일 열기 함수인 fopen()함수에는 파일 경로와 접근 방식을 설정 할 수 있다.[fopen 함수는 특정한 파일을 열고 접근할 수 있는 "포인터 주소"를 반환한다.]

기본 경로는 현재 프로그램의 경로이다. 가장 많이 사용되는 접근 방식은 다음과 같다.

r 파일에 접근하여 데이터를 읽는다.
w 파일에 접근하여 데이터를 기록한다.
(파일이 이미 존재하면 덮어쓰기 된다)
a 파일에 접근하여 데이터를 뒤에서부터 기록한다.(이어쓰기)

 

파일 입출력 함수

앞서서 기본적인 입출력을 위해, printf()와 scanf()함수를 사용하곤 했다.

파일 입출력에서는 그 대신에 fprintf()와 fscanf()를 사용한다.

fprintf(파일 포인터, 서식, 형식지정자);
fscanf(파일 포인터, 서식, 형식지정자);

파일 입출력의 과정

파일 입출력은 열고, 읽고/쓰고, 닫기 의 과정을 철저히 따라야 한다. 파일을 열 때는 파일 포인터가 사용되며, 이는 동적으로 할당된 것이다. 파일 처리 이후 파일을 닫아주지 않으면 메모리 누수가 발생한다.

 

파일을 열어 문자열 쓰기

현재 프로그램의 경로에서 특정한 파일을 쓰기 모드로 생성해서 문자열을 기록할 수 있다.

+ 파일 입출력 또한 "입력"으로 보기 때문에, 보안적으로 신경을 써야하는 부분이다. visual studio 등의 개발 환경에서는, "CRT_SECURE_NO_WARNINGS" 문구를 넣어야 한다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void){
	char s[20] = "Hello World";
	FILE *fp;
    fp = fopen("temp.txt","w");
    fprintf(fp,"%s\n",s);
    fclose(fp);
	system("pause");
	return 0;
}

 

요약

  1. 파일 입출력을 이용해 데이터를 파일로부터 가져오거나 데이터를 파일로 내보낼 수 있다.
  2. 파일 입출력이 끝난 이후에는 반드시 파일 객체를 메모리에서 할당 해제해야 한다.(메모리 누수 방지)
Comments