std::fread
Определён в заголовочном файле <cstdio> | ||
|---|---|---|
std::size_t fread( void* buffer, std::size_t size, std::size_t count, std::FILE* stream ); |
Считывает до count объектов в массив buffer из заданного входного потока stream, как если бы для каждого объекта std::fgetc вызывалась size раз, а результаты записывались в порядке получения в последовательные позиции buffer, который интерпретируется как массив unsigned char. Индикатор позиции файла для потока перемещается на количество прочитанных символов.
Если объекты не являются тривиально копируемыми, поведение не определено.
Если происходит ошибка, результирующее значение индикатора позиции файла для потока не определено. Если считывается неполный элемент, его значение не определено.
Параметры
| 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 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/c/fread