스트림에서 데이터를 읽습니다.Reads data from a stream.


size_t fread(
   void *buffer,
   size_t size,
   size_t count,
   FILE *stream

매개 변수Parameters

데이터의 저장소 위치입니다.Storage location for data.

항목 크기(바이트)입니다.Item size in bytes.

읽힐 항목의 최대 수입니다.Maximum number of items to be read.

FILE 구조체에 대한 포인터입니다.Pointer to FILE structure.

반환 값Return Value

fread 일 수 있는 반환 실제로 읽은 아이템의 수 미만 개수 오류가 발생 한 경우 또는 파일의 끝에 도달 하기 전에 발견 되 면 개수합니다.fread returns the number of full items actually read, which may be less than count if an error occurs or if the end of the file is encountered before reaching count. 사용 된 feof 또는 ferror 읽기 오류와 파일 끝 조건을 구별 하는 함수입니다.Use the feof or ferror function to distinguish a read error from an end-of-file condition. 하는 경우 크기 또는 개수 0 fread 0 고 버퍼 콘텐츠가 변경 되지 않은 반환 합니다.If size or count is 0, fread returns 0 and the buffer contents are unchanged. 하는 경우 스트림을 또는 버퍼 가 null 포인터 fread 에 설명 된 대로 잘못 된 매개 변수 처리기를 호출 매개 변수 유효성 검사합니다.If stream or buffer is a null pointer, fread invokes the invalid parameter handler, as described in Parameter Validation. 이 함수를 설정 하는 경우는 계속 실행 하도록 허용 합니다 errnoEINVAL 0을 반환 합니다.If execution is allowed to continue, this function sets errno to EINVAL and returns 0.

참조 _doserrno, errno, _sys_errlist, 및 _sys_nerr 이러한 오류 코드에 대 한 자세한 내용은 합니다.See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these error codes.


fread 함수를 읽고 개수 항목 크기 입력에서 바이트 stream 에 저장 합니다 버퍼 .The fread function reads up to count items of size bytes from the input stream and stores them in buffer. 연결 된 파일 포인터 스트림을 (있는 경우) 실제로 읽는 바이트 수 만큼 증가 됩니다.The file pointer associated with stream (if there is one) is increased by the number of bytes actually read. 지정 된 스트림으로 열면 텍스트 모드, Windows 스타일 줄 바꿈 Unix 스타일 줄 바꿈 변환 됩니다.If the given stream is opened in text mode, Windows-style newlines are converted into Unix-style newlines. 즉, 캐리지 리턴-줄 바꿈 (CRLF) 쌍은 단일 줄 바꿈 (LF) 문자로 대체 됩니다.That is, carriage return-linefeed (CRLF) pairs are replaced by single linefeed (LF) characters. 이렇게 바뀌더라도 파일 포인터 또는 반환 값에는 영향을 미치지 않습니다.The replacement has no effect on the file pointer or the return value. 오류가 발생할 경우 파일 포인터 위치는 비활성화 상태입니다.The file-pointer position is indeterminate if an error occurs. 부분적으로 읽은 항목의 값은 확인할 수 없습니다.The value of a partially read item cannot be determined.

텍스트 모드 스트림 데이터의 양이 요청 된 경우 사용 하는 경우 (즉, 크기 * 개수) 보다 크거나 같은 내부 파일 *버퍼 크기 (기본적으로이 4096 바이트를 사용 하 여 구성할 수 있습니다 setvbuf), 스트림 데이터는 사용자가 제공한 버퍼에 직접 복사 되 고 해당 버퍼에 줄 바꿈 변환이 수행 됩니다.When used on a text mode stream, if the amount of data requested (that is, size * count) is greater than or equal to the internal FILE * buffer size (by default this is 4096 bytes, configurable by using setvbuf), stream data is copied directly into the user-provided buffer, and newline conversion is done in that buffer. 변환된 된 데이터는 지난 데이터 버퍼에 복사 하는 스트림 데이터를 보다 짧은 수 있으므로 버퍼[return_value * 크기] ( 여기서 return_value 의 반환 값은 fread) 파일에서 변환 되지 않은 데이터를 포함할 수 있습니다.Since the converted data may be shorter than the stream data copied into the buffer, data past buffer[return_value * size] (where return_value is the return value from fread) may contain unconverted data from the file. 이러한 이유로 있습니다를 null로 종료 문자 데이터에 권장 버퍼[return_value * 크기] 버퍼의 의도 한 경우 에 C 스타일 문자열로 작동 합니다.For this reason, we recommend you null-terminate character data at buffer[return_value * size] if the intent of the buffer is to act as a C-style string. 참조 fopen 텍스트 모드 및 이진 모드에 미치는 영향에 대 한 세부 정보에 대 한 합니다.See fopen for details on the effects of text mode and binary mode.

이 함수는 다른 스레드를 잠급니다.This function locks out other threads. 잠기지 않는 버전을 해야 하는 경우 사용 하 여 _fread_nolock합니다.If you need a non-locking version, use _fread_nolock.

요구 사항Requirements

기능Function 필수 헤더Required header
freadfread <stdio.h><stdio.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.For additional compatibility information, see Compatibility.


// crt_fread.c
// This program opens a file named FREAD.OUT and
// writes 25 characters to the file. It then tries to open
// FREAD.OUT and read in 25 characters. If the attempt succeeds,
// the program displays the number of actual items read.

#include <stdio.h>

int main( void )
   FILE *stream;
   char list[30];
   int  i, numread, numwritten;

   // Open file in text mode:
   if( fopen_s( &stream, "fread.out", "w+t" ) == 0 )
      for ( i = 0; i < 25; i++ )
         list[i] = (char)('z' - i);
      // Write 25 characters to stream
      numwritten = fwrite( list, sizeof( char ), 25, stream );
      printf( "Wrote %d items\n", numwritten );
      fclose( stream );

      printf( "Problem opening the file\n" );

   if( fopen_s( &stream, "fread.out", "r+t" ) == 0 )
      // Attempt to read in 25 characters
      numread = fread( list, sizeof( char ), 25, stream );
      printf( "Number of items read = %d\n", numread );
      printf( "Contents of buffer = %.25s\n", list );
      fclose( stream );
      printf( "File could not be opened\n" );
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb

참고자료See also

스트림 I/OStream I/O
텍스트 및 이진 파일 I/OText and Binary File I/O