std::fread
From cppreference.com
| ヘッダ <cstdio>で定義 |
||
| std::size_t fread( void* buffer, std::size_t size, std::size_t count, std::FILE* stream ); |
||
指定された入力ストリームstreamから、配列bufferに最大count個のオブジェクトを読み込みます。これは、各オブジェクトに対してsize回std::fgetcを呼び出し、取得した結果を順にbufferの連続する位置に格納するのと同じです。bufferは、unsigned charの配列として再解釈されます。ストリームのファイル位置指示子は、読み取られた文字数だけ進められます。
オブジェクトがTriviallyCopyableでない場合、動作は未定義です。
エラーが発生した場合、ストリームのファイル位置指示子の結果の値は未定義になります。部分的な要素が読み取られた場合、その値は未定義になります。
目次 |
[編集] パラメータ
| buffer | - | 読み取る配列の最初のオブジェクトへのポインタ |
| size | - | 各オブジェクトのバイト単位のサイズ |
| count | - | 読み取るオブジェクトの数 |
| stream | - | 読み込む入力ファイルストリーム |
[編集] 戻り値
正常に読み取られたオブジェクトの数。エラーまたはファイルの終端条件が発生した場合、countより少ない場合があります。
sizeまたはcountがゼロの場合、freadはゼロを返し、それ以外の操作は行いません。
freadはファイルの終端とエラーを区別せず、呼び出し元はどちらが発生したかを判断するためにstd::feofおよびstd::ferrorを使用する必要があります。
[編集] 例
このコードを実行
#include <cstddef> #include <cstdio> #include <fstream> #include <iomanip> #include <iostream> #include <vector> int main() { // Prepare file std::ofstream("test.txt") << 1 << ' ' << 2 << '\n'; std::FILE* f = std::fopen("test.txt", "r"); std::vector<char> buf(4); // char is trivially copyable const std::size_t n = std::fread(&buf[0], sizeof buf[0], buf.size(), f); std::cout << "Read " << n << " object" << (n > 1 ? "s" : "") << ": " << std::hex << std::uppercase << std::setfill('0'); for (char n : buf) std::cout << "0x" << std::setw(2) << static_cast<short>(n) << ' '; std::cout << '\n'; std::vector<std::string> buf2; // string is not trivially copyable // This would result in undefined behavior: // std::fread(&buf2[0], sizeof buf2[0], buf2.size(), f); }
実行結果の例
Read 4 objects: 0x31 0x20 0x32 0x0A
[編集] 関連項目
| stdin、ファイルストリーム、またはバッファから書式付き入力を読み取ります。 (関数) | |
| ファイルストリームから文字列を取得する (関数) | |
| ファイルに書き込む (関数) | |
| Cドキュメント (fread)
| |