C에서 표준 라이브러리 stdio.h는 디스크의 영구 데이터 작업을 위한 포괄적인 함수 세트를 제공합니다. 이 도구들을 마스터하면 데이터 무결성과 프로그램 안정성을 보장하면서 파일을 안정적으로 생성, 읽기, 쓰기, 닫을 수 있습니다.
주요 파일 처리 함수
함수
목적
fopen()
기존 파일 열기 또는 새 파일 생성
fclose()
열린 파일 닫기 및 리소스 해제
fprintf()
파일에 포맷된 텍스트 쓰기
fscanf()
파일에서 포맷된 데이터 읽기
getc()
파일에서 단일 문자 읽기
putc()
파일에 단일 문자 쓰기
fgets()
한 줄 전체를 버퍼로 읽기
fputs()
포맷 없이 문자열을 파일에 쓰기
fseek()
파일 포인터를 지정된 위치로 이동
ftell()
현재 파일 포인터 위치 조회
rewind()
파일 포인터를 처음으로 리셋
파일 모드 설명
모드
설명
"r"
읽기 전용으로 열기; 파일 없으면 실패
"w"
쓰기 전용으로 열기; 기존 파일 잘라내기 또는 새 파일 생성
"a"
추가 모드로 열기; 쓰기는 파일 끝에 추가
"r+"
읽기/쓰기 위해 처음부터 열기
"w+"
읽기/쓰기 위해 열기; 기존 파일 잘라내기
"a+"
읽기/쓰기 위해 열기; 새 데이터 추가
파일 생성
파일 생성 또는 열기를 위해 먼저 파일 포인터를 선언한 후 원하는 파일명과 모드로 fopen() 호출:
FILE *fp;
fp = fopen("data.txt", "w");
파일이 없으면 fopen()이 생성합니다. 이미 존재하면 모드에 따라 내용 보존 또는 덮어쓰기 결정.
절대 경로 지정도 가능:
fp = fopen("D:/data.txt", "w");
파일 생성 단계 이미지:
파일 닫기
모든 파일 작업 완료 후 반드시 fclose()를 호출하여 파일 디스크립터 해제와 버퍼 플러시:
fp = fopen("data.txt", "r");
...
fclose(fp);
성공 시 0, 에러 시 EOF 반환. 프로그램이 종료될 때 OS가 자동으로 파일을 닫지만, 명시적 닫기는 모범 사례입니다.
파일 쓰기
쓰기 시 필요한 곳에 줄바꿈 문자(\n)를 명시적으로 추가해야 합니다. 주요 쓰기 함수:
fputc(char, FILE*) – 단일 문자 쓰기
fputs(const char*, FILE*) – 널 종결 문자열 쓰기
fprintf(FILE*, const char*, …) – 포맷된 출력 쓰기
예제: fputc()
#include <stdio.h>
int main() {
int i;
FILE *fptr;
const char *str = "Guru99 Rocks\n";
fptr = fopen("fputc_test.txt", "w");
for (i = 0; str[i] != '\n'; i++) {
fputc(str[i], fptr);
}
fclose(fptr);
return 0;
}
출력 파일 fputc_test.txt 내용:
예제: fputs()
#include <stdio.h>
int main() {
FILE *fp = fopen("fputs_test.txt", "w+");
fputs("This is Guru99 Tutorial on fputs,", fp);
fputs("We don't need to use for loop\n", fp);
fputs("Easier than fputc function\n", fp);
fclose(fp);
return 0;
}
결과 파일 fputs_test.txt:
예제: fprintf()
#include <stdio.h>
int main() {
FILE *fptr = fopen("fprintf_test.txt", "w");
fprintf(fptr, "Learning C with Guru99\n");
fclose(fptr);
return 0;
}
----read a line----
Learning C with Guru99
----read and parse data----
Read String1 |Learning|
Read String2 |C|
Read String3 |with|
Read String4 |Guru99|
----read the entire file----
Learning C with Guru99