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(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); OPIS 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 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 Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: 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.12 17 listopada 2024 r. fread(3)