Namespaces
Variants

std:: fread

From cppreference.net
< cpp ‎ | io ‎ | c
헤더 파일에 정의됨 <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 가 0이면, fread 는 0을 반환하고 다른 동작을 수행하지 않습니다.

fread 는 파일 끝과 오류를 구분하지 않으며, 호출자는 std::feof std::ferror 를 사용하여 어떤 상황이 발생했는지 확인해야 합니다.

예제

#include <cstddef>
#include <cstdio>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <vector>
int main()
{
    // 파일 준비
    std::ofstream("test.txt") << 1 << ' ' << 2 << '\n';
    std::FILE* f = std::fopen("test.txt", "r");
    std::vector<char> buf(4); // char는 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은 trivially copyable이 아님
//  이는 정의되지 않은 동작을 초래함:
//  std::fread(&buf2[0], sizeof buf2[0], buf2.size(), f);
}

가능한 출력:

Read 4 objects: 0x31 0x20 0x32 0x0A

참고 항목

stdin , 파일 스트림 또는 버퍼로부터 형식화된 입력을 읽음
(함수)
파일 스트림으로부터 문자열을 가져옴
(함수)
파일에 기록
(함수)