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?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…