// education

스트림과 파일 입출력 (fopen, fclose, fread, fwrite)

프로그램이 종료되어도 데이터를 영구히 저장하려면 보조기억장치의 **파일(File)**에 기록해야 합니다. C 언어는 **스트림(Stream)**이라는 데이터 통로를 통해 파일 입출력을 처리합니다.


1. 파일 입출력 3단계 필수 순서

  1. 파일 열기 (fopen): 파일과 프로그램 사이에 통로(스트림) 연결 및 FILE* 포인터 반환.
  2. 읽기/쓰기 작업: fprintf, fscanf, fputs, fgets 등 수행.
  3. 파일 닫기 (fclose): 사용이 끝난 스트림 자원을 해제.

2. 파일 텍스트 쓰기 / 읽기 예시

#include <stdio.h>

int main(void) {
    // 1. 파일 열기 (쓰기 모드 'w')
    FILE *fp = fopen("data.txt", "w");
    if (fp == NULL) {
        printf("파일 열기 실패!\n");
        return 1;
    }

    // 2. 파일에 기록
    fprintf(fp, "이름: %s, 점수: %d\n", "이인상", 100);

    // 3. 파일 닫기
    fclose(fp);
    printf("data.txt에 데이터가 저장되었습니다.\n");
    return 0;
}

3. 대표적인 파일 오픈 모드 (Mode)

모드 의미 파일이 없을 때 파일이 이미 있을 때
"r" 읽기 전용 (Read) 에러 (NULL 반환) 정상 열림
"w" 쓰기 전용 (Write) 새 파일 생성 기존 내용을 싹 덮어씀(삭제)
"a" 추가 쓰기 (Append) 새 파일 생성 기존 내용 뒤에 덧붙임
"rb" / "wb" 바이너리 입출력 모드 이진 파일 전용 이진 파일 전용

4. 자주 묻는 질문 (Q&A)

Q. 파일 작업이 끝나고 fclose()를 안 부르면 어떻게 되나요? A. 버퍼에 남아있는 데이터가 파일에 완전히 반영되지 못해 짤리거나, 시스템 자원(파일 핸들)이 낭비되는 메모리/스트림 누수가 발생할 수 있습니다.

← 이전포인터 심화와 활용 (이중 포인터, 함수 포인터) 다음 →전처리기 매크로와 다중 소스 파일