EP.5 파일 입출력
Phase 5: Data Persistence & File I/O
EP.5 파일 입출력 — 기록과 소환의 메커니즘
프로그램이 종료되어도 사라지지 않는 "영구적 데이터" 제어 공정
1. 데이터 영속성(Persistence)의 필요성
지금까지 우리가 다룬 변수와 구조체는 프로그램이 꺼지면 메모리(RAM)에서 증발합니다. 하지만 실제 현장의 제어 시스템은 가동 로그를 남기거나 설정값을 유지해야 합니다. 파일 입출력은 하드디스크라는 영구 저장소에 데이터를 각인하여 정전이나 종료 시에도 데이터를 보존하는 유일한 수단입니다.
- Open (열기):
fopen을 통해 파일이라는 창고 문을 엽니다. (읽기 'r' 혹은 쓰기 'w' 모드 결정) - Process (작업):
fprintf(쓰기)나fgets(읽기)를 통해 데이터를 주고받습니다. - Close (닫기):
fclose로 자원을 반납하고 창고 문을 확실히 잠급니다.
2. ⚡ 실습 1: 데이터 기록 (Write 모드)
모터의 최종 가동 상태를 motor_log.txt 파일에 박아넣는 공정입니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
FILE *fp = fopen("motor_log.txt", "w"); // 쓰기 모드 열기
if (fp == NULL) return 1;
fprintf(fp, "Conveyor_01|1300|35.5\n"); // 파일에 기록
fclose(fp); // 공정 마감
printf("기록 완료.\n");
return 0;
}
3. ⚡ 실습 2: 데이터 소환 (Read 모드)
저장된 파일에서 한 줄씩 읽어와 화면에 뿌려주는 복구 공정입니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
FILE *fp = fopen("motor_log.txt", "r"); // 읽기 모드 열기
char buffer[100];
if (fp == NULL) return 1;
printf("=== [저장된 데이터 소환] ===\n");
while (fgets(buffer, sizeof(buffer), fp) != NULL) {
printf("%s", buffer);
}
fclose(fp);
return 0;
}
파일 포인터(FILE*) 역시 우리가 배운 포인터의 일종입니다. 메모리가 아닌 파일을 가리키는 특수 리모컨이죠. 특히 fclose를 누락하면 데이터가 유실될 수 있으니, "열었으면 반드시 닫는다"는 전원 관리 원칙을 철저히 지키십시오.


댓글
댓글 쓰기