All pastes #1178422 Raw Edit

Anonymous

public text v1 · immutable
#1178422 ·published 2008-08-19 06:53 UTC
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
*/