UAP Common Extensions 3.1 Help

Data Streams

Stream copy functions provide a way to copy all - or a limited amount of - data from one stream to another.

Since the read/write functions of a UCX buffer are fully compatible with stream read/write functions, you can, for example, easily transfer data from a file or network stream to a UCX buffer or vice versa.

Overview

#include <cx/streams.h> size_t cx_stream_copy(void *src, void *dest, cx_read_func rfnc, cx_write_func wfnc); size_t cx_stream_ncopy(void *src, void *dest, cx_read_func rfnc, cx_write_func wfnc, size_t n); size_t cx_stream_bcopy(void *src, void *dest, cx_read_func rfnc, cx_write_func wfnc, char *buf, size_t bufsize); size_t cx_stream_bncopy(void *src, void *dest, cx_read_func rfnc, cx_write_func wfnc, char *buf, size_t bufsize, size_t n);

Description

All functions in the stream copy family use the rfnc to read data from src and use the wfnc to write the data to dest.

The cx_stream_copy() function always uses internal stack memory as a temporary buffer for the read bytes. The cx_stream_bcopy() function uses either a pre-initialized buffer buf of length bufsize or, if buf is NULL, an internal heap-allocated buffer.

The cx_stream_ncopy() function behaves like cx_stream_copy() except, that it reads at most n bytes (and the same is true for cx_stream_bncopy() and cx_stream_bcopy()).

Example

The following example shows, how to read the contents of a file into a buffer:

FILE *inputfile = fopen(infilename, "r"); if (inputfile) { CxBuffer fbuf; cxBufferInit(&fbuf, NULL, 4096, NULL, CX_BUFFER_AUTO_EXTEND); cx_stream_copy(inputfile, &fbuf, (cx_read_func) fread, cxBufferWriteFunc); fclose(inputfile); // ... do something meaningful with the contents ... cxBufferDestroy(&fbuf); } else { perror("Error opening input file"); }
Last modified: 06 April 2025