title: What is the difference between fmemopen and open_memstream?
body: <p>While reading through the GNU documentation on <a href="http://www.gnu.org/software/libc/manual/html_node/String-Streams.html" rel="noreferrer">string streams</a> I found two similar functions that do very similar things:</p>
  
  <pre><code>FILE * fmemopen (void *buf, size_t size, const char *opentype)
  FILE * open_memstream (char **ptr, size_t *sizeloc)
  </code></pre>
  
  <p>From reading the documentation, it seems <code>open_memstream</code> should be used for opening an output stream and <code>fmemopen</code> for input. What catches me is the <code>opentype</code> argument that you can pass to <code>fmemopen</code>.</p>
  
  <p>The linux <a href="http://man7.org/linux/man-pages/man3/fmemopen.3.html" rel="noreferrer">manpage explains</a>:</p>
  
  <blockquote>
    <p>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).</p>
  </blockquote>
  
  <p>So what would be the point of using <code>open_memstream</code> if <code>fmemopen</code> can handle opening an input/output stream?</p>