# C 언어 파일 입출력 (File I/O) 기초
C언어 3 / 4
4 min read
목차
C 언어 파일 입출력 (File I/O) 기초
C 언어 파일 입출력 (File I/O) 기초 정리
오늘은 C 언어에서 가장 기본적이면서도 실무에서도 자주 쓰이는 파일 입출력 (File I/O) 을 공부했다.
임베디드, 시스템 프로그래밍을 하려면 반드시 알아야 하는 기본기라서 기록으로 남겨둔다.
1. 파일 포인터와 fopen
- C에서 파일은 단순히 스트림(stream) 으로 다뤄진다.
FILE *fp;→ 파일을 가리키는 포인터fopen("파일명", "모드")로 열고,fclose(fp)로 닫는다.
| 모드 | 의미 |
|---|---|
"r" | 읽기 전용 (파일 없으면 실패) |
"w" | 쓰기 전용 (파일 있으면 덮어씀) |
"a" | 추가 모드 (파일 끝에 이어쓰기) |
"r+" | 읽기/쓰기 (파일 없으면 실패) |
"w+" | 읽기/쓰기 (기존 내용 삭제) |
"a+" | 읽기/쓰기 (끝에 추가) |
2. 주요 파일 읽기/쓰기 함수 (stdio.h)
fopen("파일명", "r")→ 읽기 모드로 열기fclose(fp)→ 파일 닫기fputc(ch, fp)→ 문자 하나 쓰기fgetc(fp)→ 문자 하나 읽기 (리턴값:int, EOF 나오면 끝)fgets(buf, size, fp)→ 문자열(한 줄) 읽기fscanf(fp, "포맷", &변수)→ 형식화된 읽기 (scanf와 동일한 원리)
3. 문자 단위 쓰기 예제 (fputc)
#include <stdio.h>
int main() { FILE *fp = fopen("hello.txt", "w"); if (!fp) return 1;
char *str = "ABCDE"; for (int i = 0; str[i] != '\0'; i++) { fputc(str[i], fp); // 한 글자씩 쓰기 } fputc('\n', fp);
fclose(fp); return 0;}📌 실행하면 hello.txt 파일에 "ABCDE\n" 이 기록된다.
4. 문자 단위 읽기 예제 (fgetc)
#include <stdio.h>
int main() { FILE *fp = fopen("hello.txt", "r"); if (!fp) return 1;
int ch; while ((ch = fgetc(fp)) != EOF) { // EOF 나올 때까지 반복 putchar(ch); // 읽은 문자 출력 }
fclose(fp); return 0;}📌 hello.txt 내용을 한 글자씩 읽어 터미널에 그대로 출력한다.
5. 줄 단위 읽기 + 데이터 파싱 (fgets, sscanf)
#include <stdio.h>
int main() { FILE *fp = fopen("students.txt", "r"); if (!fp) return 1;
char buf[100]; // 한 줄 저장 버퍼 char name[50]; // 이름 저장 int score; // 점수 저장
while (fgets(buf, sizeof(buf), fp)) { sscanf(buf, "%s %d", name, &score); // 문자열 + 정수 파싱 printf("이름: %s, 점수: %d\n", name, score); }
fclose(fp); return 0;}📂 students.txt 파일이 다음과 같다면:
홍길동 95이순신 88강감찬 76실행 결과:
이름: 홍길동, 점수: 95이름: 이순신, 점수: 88이름: 강감찬, 점수: 76마무리
오늘 배운 핵심:
- 파일은 스트림으로 다룬다. (
FILE *fp) - 문자 단위 I/O:
fputc,fgetc - 줄 단위 I/O:
fgets - 데이터 파싱:
sscanf
이 기본기만 알면 텍스트 로그 분석, 설정 파일 읽기, 간단한 데이터 처리까지 가능하다.
실무에서는 getline(), CSV/JSON 라이브러리 등 더 강력한 방법도 있다고한다.