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.

streamstream
FILE 構造体へのポインター。Pointer to FILE structure.

戻り値Return 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.

RemarksRemarks

Fread_s関数は、最大読み取りますカウントの項目elementSize入力からのバイトストリームで格納してバッファーします。The fread_s function reads up to count items of elementSize bytes from the input stream and stores them in buffer. ファイル ポインターに関連付けられているストリーム(1 つである) 場合は実際に読み取られたバイト数でインクリメントします。The file pointer that is associated with stream (if there is one) is increased by the number of bytes actually read. 指定したストリームがテキスト モードで開かれている場合、は、復帰と改行のペアが 1 つのラインフィード文字に置き換えられます。If the given stream is opened in text mode, carriage return-linefeed pairs are replaced with single linefeed 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.

必要条件Requirements

関数Function 必須ヘッダーRequired header
fread_sfread_s <stdio.h><stdio.h>

互換性の詳細については、「互換性」を参照してください。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

ストリーム入出力Stream I/O
fwritefwrite
_read_read