Listing 7. simpleread.cpp Reads from argv[1] at a Nominated usec
Rate in argv[2]

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>

#include <iostream>
#include <sstream>
using namespace std;

int main( int argc, char** argv )
{
    cerr << "opening argv[1]:" << argv[1] << endl;

    long offset = 0;
    int fd = open( argv[1], O_RDONLY );

    unsigned long usec = 10000;
    if( argc > 2 )
    {
        stringstream ss;
        ss << argv[2];
        ss >> usec;
    }
    cerr << "using delay of usec:" << usec << endl;

    const int bufsz = 4096;
    char buf[ bufsz ];
    bool error = false;

    while( true )
    {
        ssize_t rc = read( fd, buf, bufsz );
        if( rc > 0 )
        {
            if( error )
            {
                cerr << "reading resumed" << endl;
            }
            error = false;
            offset += rc;
        }
        else if( rc == 0 )
        {
            cerr << "end of file" << endl;
            exit(0);
        }
        else
        {
            error = true;
            cerr << "read error:" << errno
                 << " at offset:" << offset
                 << endl;
        }
        usleep( usec );
        if( offset % (1024*256) == 0 )
            cerr << "offset:" << offset << endl;
    }
    return 0;
}

