ストリームからデータを読み取ります。Reads data from a stream.


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


データの格納場所。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関数は、最大読み取りますカウントの項目サイズ入力からのバイトストリームに保存バッファー.The fread function reads up to count items of size bytes from the input stream and stores them in buffer. 関連付けられたファイル ポインターストリーム(1 つである) 場合は実際に読み取られたバイト数でインクリメントします。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) のペアが 1 つのラインフィード (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.


関数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

ストリーム入出力Stream I/O
テキスト モードとバイナリ ファイル入出力Text and Binary File I/O