fread_sfread_s

스트림에서 데이터를 읽습니다.Reads data from a stream. CRT의 보안 기능에 설명된 대로 이 버전의 fread에 대한 보안 기능이 향상되었습니다.This version of fread has security enhancements, as described in Security Features in the CRT.

구문Syntax

size_t fread_s(
   void *buffer,
   size_t bufferSize,
   size_t elementSize,
   size_t count,
   FILE *stream
);

매개 변수Parameters

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

bufferSizebufferSize
출력 버퍼의 바이트 크기입니다.Size of the destination buffer in bytes.

elementSizeelementSize
읽을 항목의 크기(바이트)입니다.Size of the item to read in bytes.

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

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

Return ValueReturn Value

fread_s 는 버퍼로 읽어온 (전체) 항목 수를 반환 합니다 .이 수는 읽기 오류 또는 파일의 끝에 도달 하 여 개수 에 도달 하기 전에 개수 보다 적을 수 있습니다.fread_s returns the number of (whole) items that were read into the buffer, which may be less than count if a read error or the end of the file is encountered before count is reached. Feof 또는 ferror 함수를 사용 하 여 파일 끝 조건과 오류를 구분 합니다.Use the feof or ferror function to distinguish an error from an end-of-file condition. 크기 또는 개수가 0 인 경우 fread_s 0을 반환 하 고 버퍼 내용이 변경 되지 않습니다.If size or count is 0, fread_s returns 0 and the buffer contents are unchanged. 스트림 또는 버퍼가 Null 포인터인 경우는 매개 변수 유효성 검사에 설명 된 대로 잘못 된 매개 변수 처리기를 호출 fread_s 합니다.If stream or buffer is a null pointer, fread_s 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를 참조하세요.For more information about error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

설명Remarks

Fread_s 함수는 입력 스트림에서 elementSize 바이트의 항목 수를 계산 하 여 버퍼에 저장 합니다.The fread_s function reads up to count items of elementSize bytes from the input stream and stores them in buffer. 스트림 (있는 경우)과 연결 된 파일 포인터는 실제로 읽은 바이트 수 만큼 증가 합니다.The file pointer that is associated with stream (if there is one) is increased by the number of bytes actually read. 지정 된 스트림이 텍스트 모드에서 열리면 캐리지 리턴-줄 바꿈 쌍이 단일 줄 바꿈 문자로 바뀝니다.If the given stream is opened in text mode, carriage return-line feed pairs are replaced with single line feed 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.

이 함수는 다른 스레드를 잠급니다.This function locks out other threads. 잠기지 않는 버전이 필요한 경우 _fread_nolock를 사용 합니다.If you require 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
fread_sfread_s <stdio.h><stdio.h>

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

예제Example

// crt_fread_s.c
// Command line: cl /EHsc /nologo /W4 crt_fread_s.c
//
// This program opens a file that's named FREAD.OUT and
// writes characters to the file. It then tries to open
// FREAD.OUT and read in characters by using fread_s. If the attempt succeeds,
// the program displays the number of actual items read.

#include <stdio.h>

#define BUFFERSIZE 30
#define DATASIZE 22
#define ELEMENTCOUNT 2
#define ELEMENTSIZE (DATASIZE/ELEMENTCOUNT)
#define FILENAME "FREAD.OUT"

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

   for ( i = 0; i < DATASIZE; i++ )
      list[i] = (char)('z' - i);
   list[DATASIZE] = '\0'; // terminal null so we can print it

   // Open file in text mode:
   if( fopen_s( &stream, FILENAME, "w+t" ) == 0 )
   {
      // Write DATASIZE characters to stream
      printf( "Contents of buffer before write/read:\n\t%s\n\n", list );
      numwritten = fwrite( list, sizeof( char ), DATASIZE, stream );
      printf( "Wrote %d items\n\n", numwritten );
      fclose( stream );
   } else {
      printf( "Problem opening the file\n" );
      return -1;
   }

   if( fopen_s( &stream, FILENAME, "r+t" ) == 0 )   {
      // Attempt to read in characters in 2 blocks of 11
      numread = fread_s( list, BUFFERSIZE, ELEMENTSIZE, ELEMENTCOUNT, stream );
      printf( "Number of %d-byte elements read = %d\n\n", ELEMENTSIZE, numread );
      printf( "Contents of buffer after write/read:\n\t%s\n", list );
      fclose( stream );
   } else {
      printf( "File could not be opened\n" );
      return -1;
   }
}
Contents of buffer before write/read:
        zyxwvutsrqponmlkjihgfe

Wrote 22 items

Number of 11-byte elements read = 2

Contents of buffer after write/read:
        zyxwvutsrqponmlkjihgfe

참조See also

스트림 I/OStream I/O
fwritefwrite
_read_read