파일(file)은 레코드(record)들의 집합이자, 데이터가 영구적으로 저장되는 하드 디스크상의 공간을 의미합니다. C 언어에서는 파일을 활용하면 프로그램이 종료된 후에도 데이터를 보존할 수 있습니다.
C 언어의 주요 파일 연산
C 프로그래밍 언어에서 파일에 대해 수행할 수 있는 기본적인 연산은 다음과 같습니다.
- 파일 이름 지정
- 파일 열기
- 파일 읽기
- 파일 쓰기
- 파일 닫기
파일 포인터 선언 및 파일 열기 구문
파일 포인터를 선언하는 구문은 다음과 같습니다.
FILE *File pointer;
선언 예시:
FILE *fptr;
파일을 여는 구문은 다음과 같습니다.
File pointer = fopen("File name", "mode");
읽기 모드와 쓰기 모드로 파일을 여는 예시:
fptr = fopen("sample.txt", "r");
FILE *fp;
fp = fopen("sample.txt", "w");
putc()와 getc() 함수란?
putc() 함수는 파일에 한 문자를 쓰기 위해 사용됩니다.
putc() 함수의 구문은 다음과 같습니다.
putc(char ch, FILE *fp);
사용 예시:
FILE *fp; char ch; putc(ch, fp);
getc() 함수는 파일에서 한 문자를 읽기 위해 사용됩니다.
getc() 함수의 구문은 다음과 같습니다.
char getc(FILE *fp);
사용 예시:
FILE *fp; char ch; ch = getc(fp);
참고로 putc()와 getc()는 표준 라이브러리에서 매크로 형태로 구현되는 경우가 많으며, fputc(), fgetc()와 유사하게 동작합니다. 또한 파일의 끝에 도달하거나 오류가 발생하면 EOF(-1)를 반환하므로, 반복문의 종료 조건으로 활용하기에 매우 적합합니다.
예제 코드
다음은 putc() 함수와 getc() 함수를 활용한 C 프로그램 전체 예제입니다.
#include<stdio.h>
int main(){
char ch;
FILE *fp;
fp=fopen("std1.txt","w"); // 파일을 쓰기 모드로 열기
printf("enter the text.press cntrl Z:\n");
while((ch = getchar())!=EOF){
putc(ch,fp); // 각 문자를 파일에 쓰기
}
fclose(fp);
fp=fopen("std1.txt","r");
printf("text on the file:\n");
while ((ch=getc(fp))!=EOF){ // 파일에서 각 문자 읽기
putchar(ch); // 화면에 각 문자 출력
}
fclose(fp);
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
enter the text.press cntrl Z: Hi Welcome to TutorialsPoint Here I am Presenting Question and answers in C Programming Language ^Z text on the file: Hi Welcome to TutorialsPoint Here I am Presenting Question and answers in C Programming Language
프로그램 동작 흐름 정리
이 프로그램은 두 단계로 동작합니다. 첫 번째 단계에서는 std1.txt 파일을 쓰기 모드("w")로 열고, getchar()로 키보드 입력을 받아 putc() 함수를 통해 한 글자씩 파일에 저장합니다. 사용자가 Ctrl+Z(EOF)를 입력하면 쓰기가 종료되고 fclose()로 파일이 닫힙니다. 두 번째 단계에서는 같은 파일을 읽기 모드("r")로 다시 열어 getc()로 한 글자씩 읽은 뒤 putchar()로 화면에 출력하고, 최종적으로 파일을 닫으며 프로그램이 종료됩니다.