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 を返し、バッファーの内容は変更されません。 streamまたはbufferが null ポインターの場合、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