#include #include #include #include #include /* 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 */