FREAD

Section: Linux Programmer's Manual (3)
Updated: 2020-08-13
Index JM Home Page roff page
 

名前

fread, fwrite - バイナリストリームの入出力  

書式

#include <stdio.h>

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb,
              FILE *stream);
 

説明

fread() 関数は stream ポインターで指定されたストリームから nmemb 個のデータを読み込み、 ptr で与えられた場所に格納する。 個々のデータは size バイトの長さを持つ。

fwrite() 関数は ptr で指定された場所から得た nmemb 個のデータを、 stream ポインターで指定されたストリームに書き込む。 個々のデータは size バイトの長さを持つ。

これらの処理を停止せずに行いたいときは、 unlocked_stdio(3) を参照のこと。  

返り値

成功すると、 fread() と fwrite() は読み書きを行った要素の個数を返す。 size が 1 の場合は、この数字は転送されたバイト数と等しい。 エラーが生じた場合や、ファイルの末尾 (end-of-file) に達した場合、 返り値は指定した個数よりも小さい値 (または 0) となる。

The file position indicator for the stream is advanced by the number of bytes successfully read or written.

fread() は end-of-file とエラーを区別しないので、 どちらが生じたかを判断するためには、 呼び出し側で feof(3) と ferror(3) とを使用しなければならない。  

属性

この節で使用されている用語の説明については、 attributes(7) を参照。
インターフェース属性
fread(), fwrite() Thread safetyMT-Safe
 

準拠

POSIX.1-2001, POSIX.1-2008, C89.  

The program below demonstrates the use of fread() by parsing /bin/sh ELF executable in binary mode and printing its magic and class:

$ ./a.out ELF magic: 0x7f454c46 Class: 0x02  

プログラムのソース

#include <stdio.h> #include <stdlib.h>

#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))

int main(void) {
    FILE *fp = fopen("/bin/sh", "rb");
    if (!fp) {
        perror("fopen");
        return EXIT_FAILURE;
    }


    unsigned char buffer[4];


    size_t ret = fread(buffer, ARRAY_SIZE(buffer), sizeof(*buffer), fp);
    if (ret != sizeof(*buffer)) {
        fprintf(stderr, "fread() failed: %zu\n", ret);
        exit(EXIT_FAILURE);
    }


    printf("ELF magic: %#04x%02x%02x%02x\n", buffer[0], buffer[1],
           buffer[2], buffer[3]);


    ret = fread(buffer, 1, 1, fp);
    if (ret != 1) {
        fprintf(stderr, "fread() failed: %zu\n", ret);
        exit(EXIT_FAILURE);
    }


    printf("Class: %#04x\n", buffer[0]);


    fclose(fp);


    exit(EXIT_SUCCESS); }  

関連項目

read(2), write(2), feof(3), ferror(3), unlocked_stdio(3)  

この文書について

この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。


 

Index

名前
書式
説明
返り値
属性
準拠
プログラムのソース
関連項目
この文書について

This document was created by man2html, using the manual pages.
Time: 11:55:21 GMT, May 01, 2021