사용범위
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))
- ptr 에 저장할 배열의 원소 하나의 크기를 입력한다.
- 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 |