freadfread

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

구문Syntax

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

매개 변수Parameters

버퍼buffer
데이터의 스토리지 위치입니다.Storage location for data.

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

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

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

Return ValueReturn Value

fread 는 실제로 읽은 전체 항목 수를 반환 합니다. 오류가 발생 하는 경우에는 count 보다 적거나 파일의 끝에 도달 하는 경우에 는 개수 보다 적을 수 있습니다.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. Stream 또는 buffer 가 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의 r 을 참조 하세요.See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these error codes.

설명Remarks

Fread 함수는 입력 스트림에서 크기 바이트의 항목 수를 계산 하 여 버퍼에 저장 합니다.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. 즉, 캐리지 리턴 (캐리지 리턴-줄 바꿈) 쌍은 LF (단일 줄 바꿈) 문자로 대체 됩니다.That is, carriage return-line feed (CRLF) pairs are replaced by single line feed (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.

텍스트 모드 스트림에서 사용 되는 경우 요청 된 데이터 양 (즉, 크기 * )이 내부 파일 * 버퍼 크기 보다 크거나 같은 경우 (기본값은 setvbuf를 사용 하 여 구성 가능한 4096 바이트), 스트림 데이터는 사용자가 제공 하는 버퍼로 직접 복사 되 고, 줄 바꿈 변환은 해당 버퍼에서 수행 됩니다.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_valuefread의 반환 값) 이면 파일에서 변환 되지 않은 데이터가 포함 될 수 있습니다.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. 따라서 버퍼의 의도를 C 스타일 문자열로 사용할 경우 버퍼[return_value * size]에서 문자 데이터를 null로 종료 하는 것이 좋습니다.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.

기본적으로이 함수의 전역 상태는 응용 프로그램으로 범위가 지정 됩니다.By default, this function's global state is scoped to the application. 이를 변경 하려면 CRT의 전역 상태를 참조 하세요.To change this, see Global state in the CRT.

요구 사항Requirements

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

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

예제Example

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

참조See also

스트림 I/OStream I/O
텍스트 및 이진 파일 i/oText and Binary File I/O
fopenfopen
fwritefwrite
_read_read