파일(File)은 레코드들의 집합이자, 데이터를 영구적으로 저장하는 하드 디스크상의 공간을 의미합니다.
파일이 필요한 이유
- 프로그램이 종료되면 메모리에 있던 모든 데이터는 사라집니다.
- 반면 파일에 데이터를 저장해 두면 프로그램이 종료된 후에도 자료가 그대로 보존됩니다.
- 대량의 데이터를 매번 키보드로 입력하는 것은 많은 시간과 노력이 듭니다.
- 파일을 사용하면 몇 가지 명령만으로 내용에 손쉽게 접근할 수 있습니다.
- 데이터를 수정하지 않고도 한 컴퓨터에서 다른 컴퓨터로 쉽게 옮길 수 있습니다.
- C 언어의 명령어를 활용하면 다양한 방식으로 파일에 접근하고 제어할 수 있습니다.
C 언어에서의 파일 연산
C 프로그래밍에서 파일에 대해 수행할 수 있는 기본 연산은 다음과 같습니다.
- 파일 이름 지정하기
- 파일 열기
- 파일에서 데이터 읽기
- 파일에 데이터 쓰기
- 파일 닫기
기본 문법
파일 포인터 선언
FILE *파일포인터;
예시:
FILE *fptr;
파일 포인터로 파일 열기
파일포인터 = fopen("파일이름", "모드");예시 — "sample.txt" 파일을 쓰기 모드("w")로 여는 코드입니다.
FILE *fp;
fp = fopen("sample.txt", "w");예제 1: 학생 정보를 파일에 저장하기
다음은 n명의 학생에 대한 이름과 점수를 입력받아 파일에 저장하는 C 프로그램입니다.
#include <stdio.h>
int main(){
char name[50];
int marks, i, num;
printf("Enter number of students: ");
scanf("%d", &num);
FILE *fptr;
fptr = (fopen("std.txt", "w")); // 쓰기 모드로 파일 열기
if(fptr == NULL){
printf("Error!");
exit(1);
}
for(i = 0; i < num; ++i){
printf("For student%d\nEnter name: ", i+1);
scanf("%s", name);
printf("Enter marks: ");
scanf("%d", &marks);
fprintf(fptr,"\nName: %s \nMarks=%d \n", name, marks);
}
fclose(fptr);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Enter number of students: 3 For student1 Enter name: lucky Enter marks: 59 For student2 Enter name: pinky Enter marks: 89 For student3 Enter name: bob Enter marks: 45
입력된 학생 정보는 "std.txt" 파일에 순서대로 기록되며, 프로그램이 종료된 후에도 파일을 열어 확인할 수 있습니다.
예제 2: 직원 정보 저장 후 다시 읽어 출력하기
다음은 직원의 사번, 이름, 급여를 파일에 저장한 뒤, 같은 파일을 읽기 모드로 열어 내용을 화면에 출력하는 C 프로그램입니다.
#include<stdio.h>
int main ( ){
FILE *fp;
int eno;
char ename[30];
float sal;
fp =fopen ("emp.txt", "w"); // 쓰기 모드로 파일 열기
printf ("enter the details of eno, ename, sal:");
scanf ("%d%s%f", &eno, ename, &sal);
fprintf (fp, "%d%s%f", eno, ename, sal);
fclose (fp);
fp = fopen ("emp.txt", "r"); // 읽기 모드로 다시 열기
fscanf (fp, "%d%s%f", &eno, ename, &sal);
printf ("employee no: = %d\n", eno);
printf ("employee name = %s\n", ename);
printf ("salary = %f\n", sal);
fclose (fp);
return 0;
}실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
enter the details of eno, ename, sal:1 Pinky 34000 employee no: = 1 employee name = Pinky salary = 34000.000000
정리
C 언어에서 쓰기 모드("w")로 파일을 열면 해당 파일에 데이터를 기록할 수 있으며, 작업이 끝난 후에는 반드시 fclose() 함수로 파일을 닫아야 데이터가 안전하게 저장됩니다. 또한 같은 파일을 읽기 모드("r")로 다시 열면 저장된 내용을 fscanf()로 불러와 화면에 출력할 수 있습니다. 이처럼 fopen, fprintf, fscanf, fclose 등의 표준 입출력 함수를 조합하면 프로그램 종료 후에도 데이터를 영구적으로 보관하고 재활용할 수 있습니다.