fread() — 항목 읽기
형식
#include <stdio.h>
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
언어 레벨
ANSI
스레드세이프
예
설명
fread() 함수는 입력 stream에서 size 길이의 count 항목까지 읽고, 지정된 buffer에 저장합니다. 파일의 위치는 읽은 바이트의 수만큼 증가합니다.
리턴값
fread() 함수는 읽기에 성공한 전체 항목의 수를 리턴하며, 오류가 발생하거나 count에 도달하기 전에 파일 끝이면 count보다 적을 수 있습니다. size 또는 count가 0이면, fread() 함수는 0를 리턴하고 배열의 목차와 스트림의 상태가 변화없이 지속됩니다.
errno의 값은 다음으로 설정될 수 있습니다.
- 값
- 의미
- EGETANDPUT
- 허용되지 않는 읽기 조작이 쓰기 조작 후에 발생했습니다.
- ENOREC
- 레코드를 찾을 수 없습니다.
- ENOTREAD
- 파일이 읽기 조작에 대해 열려 있지 않습니다.
- ERECIO
- 파일이 레코드 I/O에 대해 열려 있습니다.
- ESTDIN
- stdin을 열 수 없습니다.
- ETRUNC
- 조작에서 잘림이 발생했습니다.
- EIOERROR
- 회복 불가능한 I/O 오류가 발생했습니다.
- EIORECERR
- 회복 가능한 I/O 오류가 발생했습니다.
ferror() 및 feof() 함수를 사용하여 읽기 오류와 파일의 끝을 구별합니다.
레코드 입력을 위해 fread()을 사용하는 경우, size를 1로 설정하고 count를 레코드의 예상 최대 길이로 설정하여 바이트의 수를 얻으십시오. 레코드 길이를 모르는 경우, size를 1로 설정하고 count를 큰 값으로 설정해야 합니다. 레코드 I/O을 사용할 때 한 번에 하나의 레코드만을 읽을 수 있습니다.
예
이 예는 파일
myfile에서 NUM_ALPHA 문자를 읽으려고
시도합니다. fread() 또는
fopen()에 오류가 있는 경우, 메세지가 출력됩니다.
#include <stdio.h>
#define NUM_ALPHA 26
int main(void)
{
FILE * stream;
int num; /* number of characters read from stream */
/* Do not forget that the '\0' char occupies one character too! */
char buffer[NUM_ALPHA + 1];
if (( stream = fopen("mylib/myfile", "r"))!= NULL )
{
memset(buffer, 0, sizeof(buffer));
num = fread( buffer, sizeof( char ), NUM_ALPHA, stream );
if ( num ) { /* fread success */
printf( "Number of characters has been read = %i\n", num );
printf( "buffer = %s\n", buffer );
fclose( stream );
}
else { /* fread failed */
if ( ferror(stream) ) /* possibility 1 */
perror( "Error reading myfile" );
else if ( feof(stream)) /* possibility 2 */
perror( "EOF found" );
}
}
else
perror( "Error opening myfile" );
}