본문 바로가기
프로그래밍/C

[C] 9. C언어의 "파일 입출력(기타)"

by iwbap 2024. 6. 13.
728x90

C 언어 학습: 파일 입출력

C 언어에서 파일 입출력은 데이터를 파일에 저장하거나 파일로부터 데이터를 읽어오는 중요한 기능입니다. 이번 글에서는 파일 개방과 닫기, 파일 읽기와 쓰기, 파일 위치 조정에 대해 알아보겠습니다.


1. 파일 개방과 닫기 (fopen, fclose)

파일을 사용하기 위해서는 먼저 파일을 열어야 합니다. 이를 위해 fopen 함수를 사용하며, 파일 사용이 끝나면 fclose 함수를 사용하여 파일을 닫습니다.

  • fopen : 파일을 열고 파일 포인터를 반환합니다.
    [c]
    FILE *fopen(const char *filename, const char *mode);  
    • filename : 열 파일의 이름
    • mode : 파일을 여는 모드 ("r" 읽기, "w" 쓰기, "a" 추가 등)
       
  • fclose : 파일을 닫습니다.
    [c]
    int fclose(FILE *stream);

 

예제

[c]
 
#include <stdio.h>

int main() {
    FILE *fp;

    // 파일 열기
    fp = fopen("example.txt", "w");
    if (fp == NULL) {
        printf("파일 열기에 실패했습니다.\n");
        return 1;
    }

    // 파일 닫기
    fclose(fp);
    return 0;
}
 

위의 예제에서 example.txt 파일을 쓰기 모드로 열고, 파일 포인터 fp를 통해 파일을 참조합니다. 파일 작업이 끝나면 fclose 함수를 사용하여 파일을 닫습니다.


2. 파일 읽기와 쓰기 (fread, fwrite, fprintf, fscanf)

파일에서 데이터를 읽고 쓰는 방법에는 여러 가지가 있습니다. 주요 함수는 다음과 같습니다.

  • fread : 바이너리 파일에서 데이터를 읽습니다.
    [c]
    size_t fread(void *ptr, size_t size, size_t count, FILE *stream);

 

  • fwrite : 바이너리 파일에 데이터를 씁니다.
    [c]
    size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);

 

  • fprintf : 텍스트 파일에 형식화된 데이터를 씁니다.
    [c]
    int fprintf(FILE *stream, const char *format, ...);

 

  • fscanf : 텍스트 파일에서 형식화된 데이터를 읽습니다.
    [c]
    int fscanf(FILE *stream, const char *format, ...);

 

예제

[c]
 
#include <stdio.h>

int main() {
    FILE *fp;
    char str[100];
    int num;

    // 파일 쓰기
    fp = fopen("example.txt", "w");
    if (fp == NULL) {
        printf("파일 열기에 실패했습니다.\n");
        return 1;
    }
    fprintf(fp, "Hello, World!\n");
    fprintf(fp, "%d\n", 42);
    fclose(fp);

    // 파일 읽기
    fp = fopen("example.txt", "r");
    if (fp == NULL) {
        printf("파일 열기에 실패했습니다.\n");
        return 1;
    }
    fscanf(fp, "%s", str);
    fscanf(fp, "%d", &num);
    fclose(fp);

    printf("읽은 문자열: %s\n", str);
    printf("읽은 숫자: %d\n", num);

    return 0;
}
 

위의 예제에서 fprintf를 사용하여 텍스트 파일에 문자열과 숫자를 쓰고, fscanf를 사용하여 파일에서 데이터를 읽어옵니다.


3. 파일 위치 조정 (fseek, ftell)

파일 위치 지시자는 파일에서 읽기와 쓰기를 수행할 위치를 가리킵니다. 이를 조정하기 위해 fseek과 ftell 함수를 사용합니다.

  • fseek : 파일 위치 지시자를 이동합니다.
    [c]
    int fseek(FILE *stream, long int offset, int whence);
    • stream : 파일 포인터
    • offset : 이동할 바이트 수
    • whence : 시작 위치 (SEEK_SET, SEEK_CUR, SEEK_END)
  • ftell : 파일 위치 지시자의 현재 위치를 반환합니다.
    [c]
    long int ftell(FILE *stream);

예제

[c]
 
#include <stdio.h>

int main() {
    FILE *fp;
    long pos;

    // 파일 열기
    fp = fopen("example.txt", "r");
    if (fp == NULL) {
        printf("파일 열기에 실패했습니다.\n");
        return 1;
    }

    // 파일 위치 지시자 이동
    fseek(fp, 0, SEEK_END);
    pos = ftell(fp);
    printf("파일 크기: %ld 바이트\n", pos);

    // 파일 위치 지시자 처음으로 이동
    fseek(fp, 0, SEEK_SET);

    fclose(fp);
    return 0;
}
 

위의 예제에서 fseek을 사용하여 파일 위치 지시자를 파일 끝으로 이동시키고, ftell을 통해 파일 크기를 출력합니다. 그런 다음, 파일 위치 지시자를 파일 시작 부분으로 다시 이동합니다.


이번 글에서는 C 언어의 파일 입출력에 대해 알아보았습니다. 파일 입출력을 통해 데이터를 파일에 저장하고 불러올 수 있으며, 이는 많은 응용 프로그램에서 중요한 기능입니다. 다음 시간에는 메모리 관리와 관련된 주제에 대해 다뤄보겠습니다. C 언어 학습에 많은 도움이 되길 바랍니다. Happy Coding!

728x90