파일(File)은 여러 레코드(record)의 집합이며, 데이터를 영구적으로 저장하는 하드 디스크상의 공간을 의미합니다. 프로그램이 종료된 후에도 데이터를 보관해야 한다면 파일 입출력은 필수적인 개념입니다.
C 언어에서의 파일 연산
C 프로그래밍 언어에서 파일에 대해 수행할 수 있는 주요 연산은 다음과 같습니다.
- 파일 이름 지정하기
- 파일 열기
- 파일에서 데이터 읽기
- 파일에 데이터 쓰기
- 파일 닫기
파일 열기 문법
파일 포인터를 선언하는 기본 문법은 다음과 같습니다.
FILE *파일포인터;
예를 들면 다음과 같습니다.
FILE *fptr;
파일을 열 때는 fopen() 함수를 사용하며, 문법은 아래와 같습니다.
파일포인터 = fopen("파일 이름", "모드");실제 사용 예시입니다.
fptr = fopen("sample.txt", "r"); // 읽기 모드로 열기
FILE *fp;
fp = fopen("sample.txt", "w"); // 쓰기 모드로 열기여기서 "r"은 읽기(read) 모드, "w"는 쓰기(write) 모드를 나타냅니다. 쓰기 모드로 파일을 열 경우 해당 파일이 없으면 새로 생성되고, 이미 존재하면 기존 내용이 삭제됩니다.
fgets() 함수: 파일에서 문자열 읽기
fgets() 함수는 파일에서 문자열(string)을 읽어 올 때 사용합니다.
fgets() 함수의 문법은 다음과 같습니다.
fgets(문자열변수, 문자 수, 파일포인터);
사용 예시입니다.
FILE *fp; char str[30]; fgets(str, 30, fp);
위 코드는 fp가 가리키는 파일에서 최대 29개의 문자(마지막 한 칸은 널 문자 '\0'을 위해 남겨둠) 또는 줄바꿈 문자를 만날 때까지 읽어 str 배열에 저장합니다.
fputs() 함수: 파일에 문자열 쓰기
fputs() 함수는 파일에 문자열을 쓸 때 사용합니다.
fputs() 함수의 문법은 다음과 같습니다.
fputs(문자열변수, 파일포인터);
사용 예시입니다.
FILE *fp; char str[30]; fputs(str, fp);
전체 예제 프로그램
다음은 fputs() 함수로 파일에 문자열을 쓰고, fgets() 함수로 다시 읽어 화면에 출력하는 C 프로그램입니다.
#include <stdio.h>
int main(){
FILE *fptr = fopen("sample.txt","w");
fputs("TutorialPoints\n",fptr);
fputs("C programming\n",fptr);
fputs("Question & Answers",fptr);
fclose(fptr);
fptr = fopen("sample.txt","r");
char string[30];
while(fgets(string,30,fptr)!=NULL){
printf("%s",string);
}
fclose(fptr);
return 0;
}프로그램 동작 설명
- 먼저 sample.txt 파일을 쓰기 모드(w)로 엽니다.
- fputs() 함수를 세 번 호출하여 각각의 문자열을 파일에 기록합니다.
- fclose()로 파일을 닫아 버퍼의 내용을 디스크에 저장합니다.
- 같은 파일을 다시 읽기 모드(r)로 엽니다.
- while 루프에서 fgets()가 NULL을 반환할 때까지(즉, 파일 끝에 도달할 때까지) 한 줄씩 읽어 printf()로 출력합니다.
- 마지막으로 파일을 닫고 프로그램을 종료합니다.
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
TutorialPoints C programming Question & Answers
정리
fgets()와 fputs()는 C 언어에서 텍스트 파일을 다룰 때 가장 기본적이면서도 널리 사용되는 함수입니다. fgets()는 파일에서 안전하게 한 줄씩 읽어 들이고, fputs()는 문자열을 파일에 손쉽게 기록할 수 있습니다. 두 함수를 fopen(), fclose()와 함께 사용하면 파일 입출력 로직을 깔끔하고 효율적으로 구현할 수 있습니다.