freadfread

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

構文Syntax

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

パラメーターParameters

バッファーbuffer
データの格納場所。Storage location for data.

sizesize
項目サイズ (バイト単位)。Item size in bytes.

countcount
読み取る項目の最大数。Maximum number of items to be read.

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

戻り値Return Value

freadは、実際に読み取られた完全な項目の数を返します。エラーが発生した場合、またはファイルの末尾がカウントに到達する前に検出された場合は、 countよりも小さくなることがあります。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. Read エラーをファイルの終端の条件と区別するには、 feof関数またはferror関数を使用します。Use the feof or ferror function to distinguish a read error from an end-of-file condition. Sizeまたはcountが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.

RemarksRemarks

Fread関数は、入力ストリームからサイズバイトの項目を読み取り、バッファーに格納します。The fread function reads up to count items of size bytes from the input stream and stores them in buffer. ストリームに関連付けられているファイルポインター (存在する場合) は、実際に読み取られたバイト数によって増加します。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) のペアは、単一行フィード (LF) 文字に置き換えられます。That is, carriage return-line feed (CRLF) pairs are replaced by single line feed (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. 変換されたデータはバッファーに[コピーされたストリームデータよりも短い場合があるため、datareturn_value * size] ( return_valuefreadからの戻り値) である可能性があります。ファイルからの未変換データを格納します。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. このため、バッファーの目的が C スタイルの文字列として機能する場合は、バッファー[return_value * sizeで null 値を終了することをお勧めします。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.

必要条件Requirements

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

互換性の詳細については、「互換性」を参照してください。For additional compatibility information, see Compatibility.

Example

// 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

関連項目See also

ストリーム入出力Stream I/O
テキストファイルとバイナリファイル i/oText and Binary File I/O
fopenfopen
fwritefwrite
_read_read