fread(3) Library Functions Manual fread(3) NAZWA fread, fwrite - odczyt/zapis strumienia binarnego BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include size_t fread(void ptr[restrict .size * .nmemb], size_t size, size_t nmemb, FILE *restrict stream); size_t fwrite(const void ptr[restrict .size * .nmemb], size_t size, size_t nmemb, FILE *restrict stream); OPIS Funkcja fread() odczytuje nmemb elementow danych, kazdy o rozmiarze size bajtow, ze strumienia wskazywanego przez stream, do miejsca w pamieci wskazywanego przez ptr. Funkcja fwrite() zapisuje nmemb 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). The file position indicator for the stream is advanced by the number of bytes successfully read or written. 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 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 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() 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); } 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 i Robert Luberda 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.06 31 pazdziernika 2023 r. fread(3)