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
パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーを呼び出します。 実行の継続が許可された場合、この関数は errno
を EINVAL
に設定し、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_value
は fread
からの戻り値) には、ファイルからの変換されていないデータが含まれる場合があります。 このため、バッファーの目的が 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
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示