fread, fwrite - odczyt/zapis strumienia binarnego
Standardowa biblioteka C (
libc,
-lc)
#include <stdio.h>
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);
Funkcja
fread() odczytuje
nmemb elementów danych,
każdy o rozmiarze
size bajtów, ze strumienia wskazywanego
przez
stream, do miejsca w pamięci wskazywanego przez
ptr.
Funkcja
fwrite() zapisuje
nmemb elementów danych,
każdy o rozmiarze
size bajtów, do strumienia wskazywanego
przez
stream, pobierając je z miejsca w pamięci
wskazywanego przez
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).
The file position indicator for the stream is advanced by the number of bytes
successfully read or written.
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-Safe |
POSIX.1-2001, POSIX.1-2008, C99.
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;
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);
}
read(2),
write(2),
feof(3),
ferror(3),
unlocked_stdio(3)
Autorami polskiego tłumaczenia niniejszej strony podręcznika
są: Adam Byrtek <
[email protected]>, Andrzej Krzysztofowicz
<
[email protected]> i Robert Luberda <
[email protected]>
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
[email protected]