fread(3) Library Functions Manual fread(3) NAME fread, fwrite - binary stream input/output LIBRARY Standard C library (libc, -lc) SYNOPSIS #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); DESCRIPTION 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. For nonlocking counterparts, see unlocked_stdio(3). RETURN VALUE On success, fread() and fwrite() return the number of items read or writ- ten. This number equals the number of bytes transferred only when size is 1. If an error occurs, or the end of the file is reached, the return value is a short item count (or zero). The file position indicator for the stream is advanced by the number of bytes successfully read or written. fread() does not distinguish between end-of-file and error, and callers must use feof(3) and ferror(3) to determine which occurred. ATTRIBUTES For an explanation of the terms used in this section, see attributes(7). allbox; lbx lb lb l l l. Interface Attribute Value T{ fread(), fwrite() T} Thread safety MT-Safe STANDARDS C11, POSIX.1-2008. HISTORY POSIX.1-2001, C89. EXAMPLES 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 Program source #include #include #include 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), countof(buffer), fp); if (ret != countof(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); } SEE ALSO read(2), write(2), feof(3), ferror(3), unlocked_stdio(3) Linux man-pages 6.18 2026-02-10 fread(3)