fread
The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.
The latest version of this topic can be found at fread.
Reads data from a stream.
Syntax
size_t fread(
void *buffer,
size_t size,
size_t count,
FILE *stream
);
Parameters
buffer
Storage location for data.
size
Item size in bytes.
count
Maximum number of items to be read.
stream
Pointer to FILE
structure.
Return Value
fread
returns the number of full items actually read, which may be less than count
if an error occurs or if the end of the file is encountered before reaching count
. Use the feof
or ferror
function to distinguish a read error from an end-of-file condition. If size
or count
is 0, fread
returns 0 and the buffer contents are unchanged. If stream
or buffer
is a null pointer, fread
invokes the invalid parameter handler, as described in Parameter Validation. If execution is allowed to continue, this function sets errno
to EINVAL
and returns 0.
See _doserrno, errno, _sys_errlist, and _sys_nerr for more information on these, and other, error codes.
Remarks
The fread
function reads up to count
items of size
bytes from the input stream
and stores them in buffer
. The file pointer associated with stream
(if there is one) is increased by the number of bytes actually read. If the given stream is opened in text mode, carriage return–linefeed pairs are replaced with single linefeed characters. The replacement has no effect on the file pointer or the return value. The file-pointer position is indeterminate if an error occurs. The value of a partially read item cannot be determined.
This function locks out other threads. If you need a non-locking version, use _fread_nolock
.
Requirements
Function | Required header |
---|---|
fread |
<stdio.h> |
For additional compatibility information, see Compatibility in the Introduction.
Example
// crt_fread.c
// This program opens a file named FREAD.OUT and
// writes 25 characters to the file. It then tries to open
// FREAD.OUT and read in 25 characters. If the attempt succeeds,
// the program displays the number of actual items read.
#include <stdio.h>
int main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten;
// Open file in text mode:
if( fopen_s( &stream, "fread.out", "w+t" ) == 0 )
{
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
// Write 25 characters to stream
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream );
}
else
printf( "Problem opening the file\n" );
if( fopen_s( &stream, "fread.out", "r+t" ) == 0 )
{
// Attempt to read in 25 characters
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb