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.
Если объекты не являются 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 |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/c/fread