c 언어

C 언어의 파일 처리 - 파일 입출력, 파일 포인터 사용법

임베디드 친구 2024. 12. 14. 11:16
반응형

파일 처리는 프로그래밍에서 데이터를 저장하고 읽어오는 데 필수적인 요소입니다. C 언어에서는 파일 입출력을 위한 강력한 기능을 제공합니다. 이번 글에서는 C 언어에서 텍스트 파일과 바이너리 파일을 다루는 방법과 파일 포인터의 사용법에 대해 자세히 설명하겠습니다.


1. 파일 처리의 기본 개념

파일은 데이터를 저장하는 데 사용되는 단위입니다. C 언어에서는 파일을 처리하기 위해 stdio.h 헤더 파일에 정의된 함수들을 사용합니다. 파일 처리의 기본 단계는 다음과 같습니다:

  1. 파일 열기 (fopen)
  2. 파일 읽기 또는 쓰기
  3. 파일 닫기 (fclose)

파일을 열거나 작업할 때는 파일의 경로나 이름과 함께 모드를 지정해야 합니다. 대표적인 파일 모드는 다음과 같습니다:

모드 설명
r 읽기 전용으로 파일 열기
w 쓰기 전용으로 파일 열기
a 추가 모드로 파일 열기
rb 바이너리 파일 읽기
wb 바이너리 파일 쓰기
ab 바이너리 파일 추가 쓰기

2. 텍스트 파일 입출력

텍스트 파일은 사람이 읽을 수 있는 형식으로 데이터를 저장합니다. 텍스트 파일을 다룰 때 주로 사용하는 함수는 fprintf, fscanf, fgets, fputs 등입니다.

2.1 텍스트 파일 쓰기 예제

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "w");
    if (file == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    fprintf(file, "안녕하세요!\n");
    fprintf(file, "C 언어의 파일 처리를 배우고 있습니다.\n");

    fclose(file);
    printf("파일에 데이터 쓰기 완료\n");
    return 0;
}

2.2 텍스트 파일 읽기 예제

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    char buffer[256];
    while (fgets(buffer, sizeof(buffer), file) != NULL) {
        printf("%s", buffer);
    }

    fclose(file);
    return 0;
}

주요 함수 설명

  • fopen: 파일 열기
  • fprintf: 파일에 포맷 지정하여 쓰기
  • fgets: 파일에서 문자열 읽기
  • fclose: 파일 닫기

3. 바이너리 파일 입출력

바이너리 파일은 데이터를 이진 형식으로 저장합니다. 이진 데이터는 텍스트로 표현하기 어려운 데이터(예: 이미지, 오디오)를 저장하는 데 유용합니다. C 언어에서 바이너리 파일을 다룰 때 주로 사용하는 함수는 fwrite, fread입니다.

3.1 바이너리 파일 쓰기 예제

#include <stdio.h>

int main() {
    FILE *file = fopen("data.bin", "wb");
    if (file == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    int numbers[] = {1, 2, 3, 4, 5};
    fwrite(numbers, sizeof(int), 5, file);

    fclose(file);
    printf("바이너리 파일에 데이터 쓰기 완료\n");
    return 0;
}

3.2 바이너리 파일 읽기 예제

#include <stdio.h>

int main() {
    FILE *file = fopen("data.bin", "rb");
    if (file == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    int numbers[5];
    fread(numbers, sizeof(int), 5, file);

    for (int i = 0; i < 5; i++) {
        printf("%d ", numbers[i]);
    }
    printf("\n");

    fclose(file);
    return 0;
}

주요 함수 설명

  • fwrite: 데이터를 바이너리 형식으로 쓰기
  • fread: 바이너리 데이터를 읽기

4. 파일 포인터의 사용법

파일 포인터는 파일에 대한 위치 정보를 제공합니다. 파일 포인터를 사용하여 파일의 특정 위치로 이동하거나 데이터를 처리할 수 있습니다.

4.1 파일 위치 이동 함수

  • fseek: 파일 포인터를 특정 위치로 이동
  • ftell: 현재 파일 포인터의 위치 반환
  • rewind: 파일 포인터를 파일의 시작으로 이동

파일 포인터 사용 예제

#include <stdio.h>

int main() {
    FILE *file = fopen("example.txt", "r");
    if (file == NULL) {
        perror("파일 열기 실패");
        return 1;
    }

    fseek(file, 0, SEEK_END);
    long file_size = ftell(file);
    rewind(file);

    printf("파일 크기: %ld 바이트\n", file_size);

    fclose(file);
    return 0;
}

5. 파일 처리 시 주의 사항

  1. 파일 열기 오류 처리: 파일이 존재하지 않거나 열기 권한이 없는 경우를 대비하여 반드시 오류 처리를 해야 합니다.
  2. 파일 닫기: 열려 있는 파일은 작업이 끝나면 반드시 닫아야 합니다.
  3. 데이터 무결성 유지: 텍스트와 바이너리 파일의 데이터를 처리할 때 데이터 손상이 발생하지 않도록 주의해야 합니다.

6. 결론

C 언어의 파일 처리는 강력하고 유연한 기능을 제공합니다. 텍스트 파일과 바이너리 파일을 다루는 방법을 이해하고, 파일 포인터를 적절히 활용하면 다양한 파일 입출력 작업을 수행할 수 있습니다. 본문에서 제공한 예제를 활용하여 직접 파일 입출력 코드를 작성하고 실행해 보세요!

반응형