fread(3) Library Functions Manual fread(3) NAZWA fread, fwrite - odczytuje/zapisuje strumien binarny BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include size_t fread(size_t size, size_t n; void ptr[restrict size * n], size_t size, size_t n, FILE *restrict stream); size_t fwrite(size_t size, size_t n; const void ptr[restrict size * n], size_t size, size_t n, FILE *restrict stream); OPIS Funkcja fread() odczytuje n elementow danych, kazdy o rozmiarze size bajtow, ze strumienia wskazywanego przez stream, do miejsca w pamieci wskazywanego przez ptr. Funkcja fwrite() zapisuje n elementow danych, kazdy o rozmiarze size bajtow, do strumienia wskazywanego przez stream, pobierajac je z miejsca w pamieci wskazywanego przez ptr. Informacje o nieblokujacych odpowiednikach znajduja sie w unlocked_stdio(3). WARTOSC ZWRACANA Funkcje fread() oraz fwrite(), jesli sie powioda, zwracaja liczbe faktycznie odczytanych lub zapisanych elementow. Ta liczba jest rowna liczne przeslanych bajtow tylko wtedy, gdy size wynosi 1. Jesli wystapi blad lub osiagniety zostanie koniec pliku, zwracana jest zmniejszona liczba elementow (lub zero). Wskaznik pozycji pliku jest przesuwany o liczbe pomyslnie odczytanych lub zapisanych bajtow. Funkcja fread() nie rozroznia pomiedzy koncem pliku a bledem, nalezy w tym celu wywolac funkcje feof(3) oraz ferror(3). ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |fread(), fwrite() | Bezpieczenstwo watkowe | MT-bezpieczne | +---------------------------+--------------------------+---------------+ STANDARDY C11, POSIX.1-2008. HISTORIA POSIX.1-2001, C89. PRZYKLADY Program ponizej demonstruje uzycie fread(), przez analize pliku wykonywalnego ELF /bin/sh w trybie binarnym i wypisanie jego magii i klasy: $ ./a.out; Magia ELF: 0x7f454c46 Klasa: 0x02 Kod zrodlowy programu #include #include #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() zawiodlo: %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() zawiodlo: %zu\n", ret); exit(EXIT_FAILURE); } printf("Klasa: %#04x\n", buffer[0]); fclose(fp); exit(EXIT_SUCCESS); } ZOBACZ TAKZE read(2), write(2), feof(3), ferror(3), unlocked_stdio(3) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Adam Byrtek , Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.15 28 czerwca 2025 r. fread(3)