# C 언어 파일 입출력 (File I/O) 기초

목차

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 라이브러리 등 더 강력한 방법도 있다고한다.

다음: C언어 - 다중포인터(2)
My avatar

블로그에 방문해주셔서 감사합니다. 문의가 있으시면 thunderbizlab@gmail.com로 연락주세요.


댓글

C언어 시리즈

# C언어 - 다중포인터(2)

C언어 4 / 4
4 min read

알고리즘 문제나 개발할 땐 늘 자바나 자바스크립트만 썼는데, C언어로도 뭔가 코딩하는 능력을 키워야겠다는 생각이 들었다. 일요일을 맞아 직접 IDE를 켜고, C언어의 꽃이라 불리는 포인터로 노드 리스트를 구현해봤다.

더보기