# Stream Reader

Functions that read from operating system streams, such as `mco_db_load()`, must specify a stream reader function which has the following prototype:

        typedef mco_size_sig_t(*mco_stream_read)(void* stream_handle, /*OUT*/void* to, mco_size_t max_nbytes);

Note that stream_handle can reference any legitimate stream (for example, a file or a socket) and to is a memory buffer of size max_nbytes.

An example of a stream reader implementation is the following:

        mco_size_sig_t file_reader( void *stream_handle /* FILE *  */,  /* OUT */void *to, mco_size_t max_nbytes )
        {
            FILE *f = (FILE *)stream_handle;
            mco_size_sig_t nbs;
            nbs = fread( to, 1, max_nbytes, f );
            return nbs;
        }