본문 바로가기
Programming

C 파일 입출력

by 나무수피아는 지식의 가지를 뻗어가는 공간입니다. 2025. 8. 17.
반응형

파일 입출력

파일 입출력이란?

파일 입출력은 C 언어에서 프로그램이 외부 파일에 데이터를 저장하거나 외부 파일로부터 데이터를 읽어오는 기능을 의미합니다. 이 기능은 데이터를 영구적으로 저장하거나 프로그램 간 데이터 교환을 할 때 매우 유용합니다. 텍스트 파일은 사람이 읽을 수 있는 형태로 데이터를 저장하고, 바이너리 파일은 메모리 그대로 저장하여 구조체 같은 복잡한 자료를 효율적으로 저장할 수 있습니다.

파일 열기와 닫기 - fopen(), fclose()

파일 입출력을 하려면 먼저 파일을 열어야 합니다. C에서는 fopen() 함수를 사용하여 파일을 열고, 사용이 끝난 후에는 fclose()로 반드시 닫아줘야 합니다. 다음은 기본적인 사용 예제입니다:

FILE *fp;
fp = fopen("data.txt", "r");  // 읽기 모드
if (fp == NULL) {
    printf("파일을 열 수 없습니다.\n");
    return 1;
}
fclose(fp);

텍스트 파일 읽기/쓰기

fprintf, fscanf

fprintf() 함수는 파일에 데이터를 형식에 맞게 출력할 때 사용하고, fscanf() 함수는 파일에서 형식에 맞게 데이터를 읽어올 때 사용됩니다.

FILE *fp = fopen("sample.txt", "w");
if (fp != NULL) {
    fprintf(fp, "이름: %s, 나이: %d\n", "홍길동", 25);
    fclose(fp);
}
FILE *fp = fopen("sample.txt", "r");
char name[20];
int age;
if (fp != NULL) {
    fscanf(fp, "이름: %s, 나이: %d", name, &age);
    printf("읽은 데이터: %s %d\n", name, age);
    fclose(fp);
}

fgets (줄 단위 읽기)

fgets() 함수는 한 줄씩 텍스트 파일을 읽어올 때 사용합니다. 보통 로그 파일이나 줄 단위로 구성된 데이터를 읽을 때 유용합니다.

char buffer[100];
FILE *fp = fopen("sample.txt", "r");
if (fp != NULL) {
    while (fgets(buffer, 100, fp) != NULL) {
        printf("%s", buffer);
    }
    fclose(fp);
}

바이너리 파일 처리

바이너리 파일은 데이터를 메모리 구조 그대로 저장하므로, 구조체나 배열 데이터를 파일에 저장할 때 많이 사용됩니다. fwrite()fread() 함수를 사용합니다.

typedef struct {
    char name[20];
    int age;
} Person;

FILE *fp = fopen("person.dat", "wb");
Person p = {"김철수", 30};
fwrite(&p, sizeof(Person), 1, fp);
fclose(fp);

fp = fopen("person.dat", "rb");
Person p2;
fread(&p2, sizeof(Person), 1, fp);
printf("이름: %s, 나이: %d\n", p2.name, p2.age);
fclose(fp);

파일 오류 처리

파일 입출력 작업 중에는 다양한 오류가 발생할 수 있습니다. 파일이 존재하지 않거나 권한이 없을 경우 fopen()NULL을 반환하므로 반드시 체크해야 합니다. perror() 함수는 오류 메시지를 출력하는 데 유용합니다.

FILE *fp = fopen("없는파일.txt", "r");
if (fp == NULL) {
    perror("파일 열기 실패");
}

파일 모드 요약

파일을 열 때 사용하는 모드는 다음과 같습니다:

  • "r" : 읽기 전용. 파일이 없으면 NULL 반환
  • "w" : 쓰기 전용. 파일이 없으면 생성, 있으면 내용 삭제
  • "a" : 추가 전용. 파일 끝에 데이터를 추가
  • "rb", "wb", "ab" : 바이너리 모드 읽기/쓰기/추가

파일 입출력은 다양한 응용 프로그램에서 핵심적인 역할을 하며, 데이터를 보존하거나 분석하는 데 반드시 필요한 기능입니다. C 언어의 파일 입출력 함수들을 잘 활용하면 프로그램의 기능을 크게 확장할 수 있습니다.

반응형

'Programming' 카테고리의 다른 글

C 전처리기  (47) 2025.08.19
C 구조체와 공용체  (60) 2025.08.18
C 포인터 기초  (63) 2025.08.16
C 배열과 문자열  (36) 2025.08.15
C 함수  (63) 2025.08.14