C언어/stdio.h

[C언어] fread 함수 (stdio.h)

아무일도없었다 2022. 8. 3. 17:48

사용범위

Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수

기능

C언어 표준 함수로 FILE 로부터 데이터를 읽어서 배열로 저장한다.

헤더

#include <stdio.h>

※ fread 함수 사용시 stdio.h 파일을 include 하지 않는다면 컴파일시 error 발생 ※


함수

size_t fread(void* ptr, size_t size, size_t count, FILE *file);

파라미터

  • void* ptr
    • FILE* 로부터 읽은 데이터를 저장할 배열(버퍼)을 입력한다.
  • size_t size
    • ptr 에 저장할 배열의 원소 하나의 크기를 입력한다.
      (ex: char a[3] : sizeof(char), struct str_t[3] : sizeof(struct str_t))
  • size_t count
    • ptr 에 저장할 배열의 개수를 입력한다. (ex: char[3] : 3 , struct str_t[4] : 4)
  • FILE* file
    • fopen 함수를 통해 얻은 FILE의 포인터를 입력한다.

반환값

성공시   fread 를 통해 실제로 읽은 배열의 원소 개수를 반환한다.
실패시   실제로 읽어야할 원소의 개수가 아닌 값이 리턴된다.
실패에 대한 설명이 모호한 부분이 있는데 실패의 기준은 프로그램마다 상이할 수 있다.
fread 를 통해 읽을 파일의 크기를 정확하게 알고 있는 경우 해당 값이 나오지 않으면 실패처리가 될 수 있지만, 읽을 파일의 크기를 정확히 할지 못하는 경우 실제로 읽은 원소의 개수를 특정지을수가 없기 때문이다.

따라서 자신이 개발중인 프로그램의 성향에 따라 return 값에 대한 처리를 해주면 된다.
(예를들어 return 값이 0 이어도 파일에 데이터가 아직 없는게 맞는 경우는 return 0 는 실패가 아닌 성공이 될수있다.)

 

 

< test.txt >

Hello fread
function test

 

<소스 코드>

#include <stdio.h>

#define MAX_BUF_SIZE 128

int main() {
    FILE* fp;
    size_t ret;
    char buffer[MAX_BUF_SIZE] = {0,};

    fp = fopen("test.txt", "r");
    if (fp != NULL) {
        ret = fread(buffer, sizeof(char), MAX_BUF_SIZE - 1, fp);
        if (ret > 0) {
            printf("[fread] ret = %d\n", (int)ret);
            printf("%s\n", buffer);
        } else {
            // fread 를 통해 데이터를 얻지 못함
        }
        fclose(fp);
    }
    return 0;
}

 

※ 실행 결과

[fread] ret = 25
Hello fread
function test

※ "Hello fread" (11 byte) + 개행문자(\n)  (1 byte) + "function test" (13 byte) = 25 byte 

반응형

'C언어 > stdio.h' 카테고리의 다른 글

[C언어] fflush 함수 (stdio.h)  (0) 2022.08.04
[C언어] fwrite 함수 (stdio.h)  (0) 2022.08.04
[C언어] fclose 함수 (stdio.h)  (0) 2022.08.02
[C언어] fopen 함수 (stdio.h)  (1) 2022.08.01
[C언어] fputs 함수 (stdio.h)  (0) 2022.07.28