파일(File)이란 레코드(record)들의 집합을 의미하며, 데이터를 영구적으로 저장하는 하드 디스크상의 저장 공간입니다. C 언어에서는 다양한 명령어를 통해 파일에 접근하고 여러 방식으로 데이터를 다룰 수 있습니다.
C 언어에서 파일이 필요한 이유
프로그램이 종료되면 메모리에 있던 모든 데이터는 사라지지만, 파일에 저장해 두면 프로그램이 종료된 후에도 데이터를 그대로 보존할 수 있습니다.
대량의 데이터를 입력해야 할 경우, 매번 직접 입력하는 데에는 많은 시간이 소요됩니다.
모든 데이터가 담긴 파일이 있다면, C 언어의 몇 가지 명령만으로도 손쉽게 파일 내용에 접근할 수 있습니다.
데이터를 변경 없이 한 컴퓨터에서 다른 컴퓨터로 손쉽게 옮길 수 있습니다.
파일에 수행할 수 있는 주요 작업
C 언어에서 파일에 대해 수행할 수 있는 대표적인 연산은 다음과 같습니다.
- 파일 이름 지정
- 파일 열기
- 파일에서 데이터 읽기
- 파일에 데이터 쓰기
- 파일 닫기
파일 열기 및 이름 지정 문법
파일 포인터 선언 형식은 다음과 같습니다.
FILE *File pointer;
예시:
FILE *fptr;
fopen() 함수를 사용하여 파일을 여는 형식은 다음과 같습니다.
File pointer = fopen("파일 이름", "모드");
예시:
fptr = fopen("sample.txt", "r");
읽기 모드("r")와 쓰기 모드("w")를 활용한 실제 코드 예시입니다.
FILE *fp;
fp = fopen("sample.txt", "w");
파일 읽기 및 쓰기 문법
파일에서 문자 읽기 형식은 다음과 같습니다.
int fgetc(FILE *fp); // 파일에서 한 글자씩 읽어옵니다
파일에 문자 쓰기 형식은 다음과 같습니다.
int fputc(int c, FILE *fp); // 스트림에 개별 문자를 씁니다
예제 프로그램
다음은 C 언어에서 파일 입출력을 보여주는 예제 프로그램입니다. 사용자로부터 직원 정보를 입력받아 파일에 저장한 후, 다시 파일에서 읽어 화면에 출력합니다.
#include<stdio.h>
void main(){
// 파일 선언
FILE *femp;
char empname[50];
int empnum;
float empsal;
char temp;
// 파일을 쓰기 모드로 열기
femp=fopen("Employee Details.txt","w");
// 사용자 입력 받기
printf("Enter the name of employee : ");
gets(empname);
printf("Enter the number of employee : ");
scanf("%d",&empnum);
printf("Enter the salary of employee : ");
scanf("%f",&empsal);
// 사용자 입력값을 파일에 쓰기
fprintf(femp,"%s\n",empname);
fprintf(femp,"%d\n",empnum);
fprintf(femp,"%f\n",empsal);
// 파일 닫기
fclose(femp);
// 파일을 읽기 모드로 다시 열기
femp=fopen("Employee Details.txt","r");
// 파일에서 데이터 읽기
fscanf(femp,"%s",empname);
// 결과 출력
printf("employee name is : %s\n",empname);
printf("employee number is : %d\n",empnum);
printf("employee salary is : %f\n",empsal);
// 파일 닫기
fclose(femp);
}
참고: gets() 함수는 버퍼 오버플로우 위험 때문에 표준에서 제거되었으므로, 실무에서는 fgets(empname, sizeof(empname), stdin) 사용을 권장합니다. 또한 파일을 열었을 때 반환 값이 NULL인지 확인하는 오류 처리를 함께 작성하면 더욱 안전한 코드가 됩니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
Enter the name of employee : Pinky Enter the number of employee : 20 Enter the salary of employee : 5000 employee name is : Pinky employee number is : 20 employee salary is : 5000.000000