rendered paste body#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <errno.h>
/* 4 small tests of fread */
#define BUFFER_SIZE 1024
int main()
{
char *file = "/tmp/mytest";
char *test_str = "FUBAR";
FILE *fp1 = NULL;
FILE *fp2 = NULL;
size_t len = strlen( test_str );
size_t blocks = 0;
int eof = 0;
char buffer1[ BUFFER_SIZE ];
char buffer2[ BUFFER_SIZE ];
char buffer3[ BUFFER_SIZE ];
char buffer4[ BUFFER_SIZE ];
/* Write a test file. */
if ( ( fp1 = fopen( file, "w" ) ) == NULL )
{
fprintf( stderr, "ERROR: Could not write-open file '%s': %s\n", file, strerror( errno ) );
abort();
}
fprintf( fp1, test_str );
fclose( fp1 );
/* Open test file for fread. */
if ( ( fp2 = fopen( file, "r" ) ) == NULL )
{
fprintf( stderr, "ERROR: Could not read-open file '%s': %s\n", file, strerror( errno ) );
abort();
}
/* First fread. */
blocks = fread( buffer1, len, 1, fp2 );
if ( ferror( fp2 ) != 0 )
{
fprintf( stderr, "ERROR: file_read failed\n" );
abort();
}
feof( fp2 ) ? ( eof = 1 ) : ( eof = 0 );
printf( "eof: %d blocks: %zu buffer1: %s\n", eof, blocks, buffer1 );
/* Second fread. */
blocks = fread( buffer2, len, 1, fp2 );
if ( ferror( fp2 ) != 0 )
{
fprintf( stderr, "ERROR: file_read failed\n" );
abort();
}
feof( fp2 ) ? ( eof = 1 ) : ( eof = 0 );
printf( "eof: %d blocks: %zu buffer2: %s\n", eof, blocks, buffer2 );
/* Rewind and try again with decreased len. */
rewind( fp2 );
len -= 2;
/* Third fread. */
blocks = fread( buffer3, len, 1, fp2 );
if ( ferror( fp2 ) != 0 )
{
fprintf( stderr, "ERROR: file_read failed\n" );
abort();
}
feof( fp2 ) ? ( eof = 1 ) : ( eof = 0 );
printf( "eof: %d blocks: %zu buffer3: %s\n", eof, blocks, buffer3 );
/* 4th fread. */
blocks = fread( buffer4, len, 1, fp2 );
if ( ferror( fp2 ) != 0 )
{
fprintf( stderr, "ERROR: file_read failed\n" );
abort();
}
feof( fp2 ) ? ( eof = 1 ) : ( eof = 0 );
printf( "eof: %d blocks: %zu buffer4: %s\n", eof, blocks, buffer4 );
fclose( fp2 );
return EXIT_SUCCESS;
}
/*
eof: 0 blocks: 1 buffer1: FUBAR
eof: 1 blocks: 0 buffer2: .
eof: 0 blocks: 1 buffer3: FUB
eof: 1 blocks: 0 buffer4: AR
*/