While reading through the GNU documentation on string streams I found two similar functions that do very similar things:
FILE * fmemopen (void *buf, size_t size, const char *opentype)
FILE * open_memstream (char **ptr, size_t *sizeloc)
From reading the documentation, it seems open_memstream
should be used for opening an output stream and fmemopen
for input. What catches me is the opentype
argument that you can pass to fmemopen
.
The linux manpage explains:
If buf is specified as NULL, then fmemopen() dynamically allocates a buffer size bytes long. This is useful for an application that wants to write data to a temporary buffer and then read it back again. The buffer is automatically freed when the stream is closed. Note that the caller has no way to obtain a pointer to the temporary buffer allocated by this call (but see open_memstream() below).
So what would be the point of using open_memstream
if fmemopen
can handle opening an input/output stream?