Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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 safety │ MT-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/ に書かれている。