#include <stdio.h> size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
The fread() function shall read into the array pointed to by ptr up to nitems elements whose size is specified by size in bytes, from the stream pointed to by stream. For each object, size calls shall be made to the fgetc() function and the results stored, in the order read, in an array of unsigned char exactly overlaying the object. The file position indicator for the stream (if defined) shall be advanced by the number of bytes successfully read. If an error occurs, the resulting value of the file position indicator for the stream is unspecified. If a partial element is read, its value is unspecified.
The fread() function may mark the last data access timestamp of the file associated with stream for update. The last data access timestamp shall be marked for update by the first successful execution of fgetc(), fgets(), fread(), fscanf(), getc(), getchar(), getdelim(), getline(), gets(), or scanf() using stream that returns data not supplied by a prior call to ungetc().
The following sections are informative.
The following example transfers a single 100-byte fixed length record from the fp stream into the array pointed to by buf.
#include <stdio.h> ... size_t elements_read; char buf[100]; FILE *fp; ... elements_read = fread(buf, sizeof(buf), 1, fp); ...
If a read error occurs, elements_read will be zero but the number of bytes read from the stream could be anything from zero to sizeof(buf)-1.
The following example reads multiple single-byte elements from the fp stream into the array pointed to by buf.
#include <stdio.h> ... size_t bytes_read; char buf[100]; FILE *fp; ... bytes_read = fread(buf, 1, sizeof(buf), fp); ...
If a read error occurs, bytes_read will contain the number of bytes read from the stream.
Because of possible differences in element length and byte ordering, files written using fwrite() are application-dependent, and possibly cannot be read using fread() by a different application or by the same application on a different processor.
The Base Definitions volume of POSIX.1-2017, <stdio.h>
Any typographical or formatting errors that appear in this page are most likely to have been introduced during the conversion of the source files to man page format. To report such errors, see https://www.kernel.org/doc/man-pages/reporting_bugs.html .