다음을 통해 공유


fread

스트림에서 데이터를 읽습니다.

구문

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

매개 변수

buffer
데이터의 스토리지 위치입니다.

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

count
읽힐 항목의 최대 수입니다.

stream
FILE 구조체에 대한 포인터입니다.

반환 값

fread는 함수가 읽은 전체 항목의 수를 반환하며, 오류가 발생하거나 파일에 도달하기 count전에 파일의 끝이 발생하는 경우보다 count 작을 수 있습니다. 읽기 오류와 파일 끝 조건을 구분하려면 feof 또는 ferror 함수를 사용하세요. size 또는 count가 0이면 fread는 0을 반환하고 버퍼 콘텐츠가 변경되지 않습니다. null 포인터인 경우 stream 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다.buffer fread 계속해서 실행하도록 허용한 경우 이 함수는 errnoEINVAL 로 설정하고 0을 반환합니다.

반환 코드에 대한 자세한 내용은 , , 및 를 참조하세요errno._sys_nerr_sys_errlist_doserrno

설명

fread 함수는 stream에서 입력 size바이트 중 최대 count개 항목을 읽고 buffer에 저장합니다. 연결된 stream 파일 포인터(있는 경우)는 읽은 바이트 fread 수만큼 고급입니다. 지정된 스트림이 텍스트 모드에서 열리면 Windows 스타일 줄 바꿈이 Unix 스타일 줄 바꿈으로 변환됩니다. 즉, CRLF(캐리지 리턴 라인 피드) 쌍은 LF(단일 줄 바꿈) 문자로 바뀝니다. 이렇게 바뀌더라도 파일 포인터 또는 반환 값에는 영향을 미치지 않습니다. 오류가 발생할 경우 파일 포인터 위치는 비활성화 상태입니다. 부분적으로 읽은 항목의 값을 확인할 수 없습니다.

텍스트 모드 스트림에서 사용되는 경우 요청된 데이터 양(즉, size * count)이 내부 FILE * 버퍼 크기보다 크거나 같으면(기본적으로 크기는 4096바이트이고, 사용하여 setvbuf구성할 수 있음), 스트림 데이터는 사용자가 제공한 버퍼로 직접 복사되고 해당 버퍼에서 줄 바꿈 변환이 수행됩니다. 변환된 데이터는 버퍼에 복사된 스트림 데이터보다 짧을 수 있으므로 [return_value * size](반환 값fread의 위치return_value)를 지나buffer간 데이터에는 파일의 변환되지 않은 데이터가 포함될 수 있습니다. 따라서 버퍼의 의도가 C 스타일 문자열로 작동하려는 경우 [return_value * size]에서 buffer문자 데이터를 null로 종료하는 것이 좋습니다. 텍스트 모드 및 이진 모드의 효과에 대한 자세한 내용은 참조 fopen 하세요.

이 함수는 다른 스레드를 잠급니다. 잠기지 않은 버전이 필요하면 _fread_nolock을 사용하세요.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.

요구 사항

함수 필수 헤더
fread <stdio.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

// 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 );

   }
   else
      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 );
   }
   else
      printf( "File could not be opened\n" );
}
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb

참고 항목

스트림 I/O
텍스트 및 이진 모드 파일 I/O
fopen
fwrite
_read