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 を返し、バッファーの内容は変更されません。 buffer null ポインターの場合streamは、「freadパラメーターの検証」で説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、この関数は errnoEINVAL に設定し、0 を返します。

リターン コードの詳細については、「errno_doserrno_sys_errlist、および _sys_nerr」を参照してください。

解説

fread 関数は、入力 stream から、size バイトの count 項目まで読み取り、buffer に格納します。 (存在する場合) に関連付 stream けられているファイル ポインターは、読み取られたバイト fread 数だけ進みます。 指定したストリームがテキスト モードで開かれている場合、Windows スタイルの改行は Unix スタイルの改行に変換されます。 つまり、復帰と改行 (CRLF) の組み合わせは、単一の改行 (LF) 文字に置き換えられます。 この置き換えは、ファイル ポインターまたは戻り値には影響しません。 エラーが発生した場合、ファイル ポインターの位置は不確定になります。 部分的に読み取られた項目の値を特定できません。

テキスト モード ストリームで使用する場合、要求されたデータの量 (つまり) size * countが内部 FILE * バッファー サイズ以上の場合 (既定ではサイズは 4096 バイト、使用 setvbufして構成可能)、ストリーム データはユーザー指定のバッファーに直接コピーされ、そのバッファーで改行変換が行われます。 変換されたデータは、バッファーにコピーされるストリーム データよりも短くなる可能性があるため、buffer[return_value * size] を超えたデータ (ここで、return_valuefread からの戻り値) には、ファイルからの変換されていないデータが含まれる場合があります。 このため、バッファーの目的が C スタイルの文字列として機能させることである場合は、buffer[return_value * size] で文字データを null で終わるようにすることをお勧めします。 テキスト モードとバイナリ モードの効果の詳細については、「fopen」を参照してください。

この関数は他のスレッドをロックします。 ロックしないバージョンが必要な場合は、_fread_nolock を使用してください。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

必要条件

機能 必須ヘッダー
fread <stdio.h>

互換性の詳細については、「 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 );

   }
   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
fopen
fwrite
_read