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 또는 count0이면, fread() 함수는 0를 리턴하고 배열의 목차와 스트림의 상태가 변화없이 지속됩니다.

errno의 값은 다음으로 설정될 수 있습니다.
의미
EGETANDPUT
허용되지 않는 읽기 조작이 쓰기 조작 후에 발생했습니다.
ENOREC
레코드를 찾을 수 없습니다.
ENOTREAD
파일이 읽기 조작에 대해 열려 있지 않습니다.
ERECIO
파일이 레코드 I/O에 대해 열려 있습니다.
ESTDIN
stdin을 열 수 없습니다.
ETRUNC
조작에서 잘림이 발생했습니다.
EIOERROR
회복 불가능한 I/O 오류가 발생했습니다.
EIORECERR
회복 가능한 I/O 오류가 발생했습니다.

ferror()feof() 함수를 사용하여 읽기 오류와 파일의 끝을 구별합니다.

레코드 입력을 위해 fread()을 사용하는 경우, size1로 설정하고 count를 레코드의 예상 최대 길이로 설정하여 바이트의 수를 얻으십시오. 레코드 길이를 모르는 경우, size1로 설정하고 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" );
 
}