fread(3) Library Functions Manual fread(3)

fread, fwrite - odczytuje/zapisuje strumień binarny

Standardowa biblioteka C (libc-lc)

#include <stdio.h>
size_t fread(void ptr[restrict .size * .n],
             size_t size, size_t n,
             FILE *restrict stream);
size_t fwrite(const void ptr[restrict .size * .n],
             size_t size, size_t n,
             FILE *restrict stream);

The function fread() reads n items of data, each size bytes long, from the stream pointed to by stream, storing them at the location given by ptr.

The function fwrite() writes n items of data, each size bytes long, to the stream pointed to by stream, obtaining them from the location given by ptr.

Informacje o nieblokujących odpowiednikach znajdują się w unlocked_stdio(3).

Funkcje fread() oraz fwrite(), jeśli się powiodą, zwracają liczbę faktycznie odczytanych lub zapisanych elementów. Ta liczba jest równa liczne przesłanych bajtów tylko wtedy, gdy size wynosi 1. Jeśli wystąpi błąd lub osiągnięty zostanie koniec pliku, zwracana jest zmniejszona liczba elementów (lub zero).

Wskaźnik pozycji pliku jest przesuwany o liczbę pomyślnie odczytanych lub zapisanych bajtów.

Funkcja fread() nie rozróżnia pomiędzy końcem pliku a błędem, należy w tym celu wywołać funkcję feof(3) oraz ferror(3).

Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

Interfejs Atrybut Wartość
fread(), fwrite() Bezpieczeństwo wątkowe MT-bezpieczne

C11, POSIX.1-2008.

POSIX.1-2001, C89.

Program poniżej demonstruje użycie fread(), przez analizę pliku wykonywalnego ELF /bin/sh w trybie binarnym i wypisanie jego magii i klasy:


$ ./a.out
Magia ELF: 0x7f454c46
Klasa: 0x02

#include <stdio.h>
#include <stdlib.h>
#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
int
main(void)
{
    FILE           *fp;
    size_t         ret;
    unsigned char  buffer[4];
    fp = fopen("/bin/sh", "rb");
    if (!fp) {
        perror("fopen");
        return EXIT_FAILURE;
    }
    ret = fread(buffer, sizeof(*buffer), ARRAY_SIZE(buffer), fp);
    if (ret != ARRAY_SIZE(buffer)) {
        fprintf(stderr, "fread() zawiodło: %zu\n", ret);
        exit(EXIT_FAILURE);
    }
    printf("Magia ELF: %#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() zawiodło: %zu\n", ret);
        exit(EXIT_FAILURE);
    }
    printf("Klasa: %#04x\n", buffer[0]);
    fclose(fp);
    exit(EXIT_SUCCESS);
}

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

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Adam Byrtek <alpha@irc.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

17 listopada 2024 r. Linux man-pages 6.12