#include #include #include /* we implement a stream (file) like data type using pointers */ typedef struct stream { char *data; /* the begginning of the data */ char *ptr; /* the current position */ int len; /* length of data */ } stream_t; /* initialize a stream */ stream_t s_fill(char *data, int len) { stream_t result; result.len = len; result.data = malloc(len); if(!result.data) { fprintf(stderr, "no memory\n"); exit(1); } /* copy data in */ memcpy(result.data, data, len); result.ptr = data; return result; } /* read from a stream */ char *s_read(stream_t *stream, int len) { stream->ptr += len; return stream->ptr - len; } int main() { char data[] = "Hello foo bar baz bomb World"; stream_t stream = s_fill(data, strlen(data)); printf("%c\n", *s_read(&stream, 1)); s_read(&stream, 3); /* skip 3 chars */ printf("%c\n", *s_read(&stream, 1)); s_read(&stream, 5); printf("%c\n", *s_read(&stream, 1)); return 0; }