본문으로 건너뛰기

파일 입출력

1. 표준 입출력 (Standard I/O)

C 프로그래밍에서 입출력은 스트림(stream) 개념을 통해 처리됩니다.

  • 스트림(Stream): 바이트의 흐름. 입력/출력 데이터를 임시로 저장하는 버퍼 포함
  • 표준 스트림 종류
    • stdin: 표준 입력(키보드)
    • stdout: 표준 출력(모니터)
    • stderr: 표준 에러 출력(모니터)

예시 코드:

#include <stdio.h>

fscanf(stdin, "%d", &num); // 표준 입력
fprintf(stdout, "%d", num); // 표준 출력
fprintf(stderr, "error!\n"); // 표준 에러 출력

2. 입출력 함수 (I/O Functions)

표준 입출력 및 파일 입출력에 사용되는 다양한 함수가 있습니다.

  • 문자 입출력
    • getchar(): 한 문자 입력
    • putchar(): 한 문자 출력
  • 문자열 입출력
    • gets_s()(권장) 또는 gets(): 문자열 입력
    • puts(): 문자열 출력
  • 형식화된 입출력
    • scanf(): 형식 지정자 사용 입력
      • %[ijk]: i, j, k로만 이루어진 문자열 입력
      • %[^ijk]: i, j, k를 제외한 문자열 입력
    • printf(): 형식 지정자 사용 출력
      • 예: printf("%+10.2f\n", fn); (+: 플래그, 10: 필드 폭, 2: 정밀도, %f: 형식)

참고: scanf는 변수의 주소를 전달해야 하며, 배열은 이름 자체가 포인터입니다.


3. 파일 입출력 (File I/O)

프로그램이 영구적으로 데이터를 저장/불러올 수 있도록 하는 기능입니다.

3.1 파일의 종류

  • 텍스트 파일: 사람이 읽을 수 있는 아스키 코드로 저장 (예: 소스 파일, 메모장)
  • 2진 파일: 2진 데이터로 저장, 사람이 읽기 어려움 (예: 실행 파일, 이미지)

3.2 파일 입출력 과정

  1. 파일 포인터 정의: FILE *f;
  2. 파일 열기: f = fopen("1.txt", "w");
  3. 작업 수행: 읽기/쓰기 등
  4. 파일 닫기: fclose(f);

3.3 파일 모드 (File Modes)

  • 텍스트 파일 모드
    • "r": 읽기 (파일 없으면 에러)
    • "w": 쓰기 (새 파일 생성, 기존 파일 덮어씀)
    • "a": 추가 (파일 끝에 데이터 추가)
    • "r+", "w+", "a+": 읽기/쓰기/추가 모드
    • "t": 텍스트 파일 모드(생략 가능)
  • 2진 파일 모드
    • "rb", "wb", "ab", "rb+", "wb+"

3.4 파일 입출력 함수

  • 문자 입출력
    • fgetc(f): 파일에서 문자 읽기
    • fputc(문자, f): 파일에 문자 쓰기
  • 문자열 입출력
    • fgets(buffer, size, f): 파일에서 문자열 읽기
    • fputs(buffer, f): 파일에 문자열 쓰기
  • 형식화된 입출력
    • fscanf(f, "%d%f", &i, &fi): 파일에서 데이터 읽기
    • fprintf(f, "%d%f", i, fi): 파일에 데이터 쓰기
    • fprintf(stderr, "error in file : %s\n", f): 에러 출력
  • 2진 파일 입출력
    • fread(buffer, sizeof(int), 10, f): 파일에서 10개 int 읽기
    • fwrite(buffer, sizeof(int), 10, f): 10개 int 파일에 쓰기

3.5 버퍼 관리 (Buffer Management)

  • fflush(fp): 버퍼 내용을 즉시 디스크에 저장 (일부 IDE 지원)
  • setbuf(fp, NULL): 버퍼 직접 지정/제거 (일부 IDE 지원)

결론

C 프로그래밍의 파일 입출력은 스트림 개념을 기반으로 하며,
표준 입출력(키보드/모니터)과 파일 입출력(디스크)로 나뉩니다.

각 방식은 문자, 문자열, 형식화 데이터, 2진 데이터 처리를 위한 다양한 함수를 제공합니다. 파일 입출력 시 파일을 특정 모드로 열고, 작업 후 반드시 닫아야 하며, 이를 통해 외부 데이터와 효과적으로 상호작용할 수 있습니다.