FMEMOPEN(3) | Library Functions Manual | FMEMOPEN(3) |
fmemopen
—
#include <stdio.h>
FILE *
fmemopen
(void
*restrict buffer, size_t
size, const char
*restrict mode);
fmemopen
() function associates a stream with the
given buffer and size. The
buffer can be either NULL
, or
must be of the given size. If the
buffer is NULL
, a
buffer of the given size will be
dynamically allocated using
malloc(3) and freed when
fclose(3) is called.
The mode argument has the same meaning as in fopen(3).
The stream treats the buffer as it would treat a file tracking the
current position to perform I/O operations. For example, in the beginning
the stream points to the beginning of the buffer, unless
a
was specified in the mode
argument, and then it points to the first NUL
byte.
If a NULL
buffer was
specified, then the stream will always point at the first byte of the
buffer.
The stream also keeps track of the size of the buffer. The size is initialized depending on the mode:
r/r+
w/w+
0
.a/a+
NUL
byte, or the
size argument if one is not found.Read or write operations advance the buffer, but not to exceed the
given size of the buffer. Trying
to read beyond the size of the
buffer results in EOF
returned. NUL
bytes are read normally. Trying to
write beyond the size of the
buffer has no effect.
When a stream open for writing is either flushed or closed, a
NUL
byte is written at the current position or at
the end of the current size as kept internally, if
there is room.
fmemopen
() returns a
FILE
pointer. Otherwise, NULL
is returned and the global variable errno is set to
indicate the error.
EINVAL
]0
; or the
mode argument is invalid; or the
buffer argument is NULL
and
the mode argument does not specify a
+
.The fmemopen
() function may also fail and
set errno for any of the errors specified for the
routine malloc(3).
fmemopen
() function conforms to
IEEE Std 1003.1-2008 (“POSIX.1”).
fmemopen
() function first appeared in
NetBSD 6.0.
September 5, 2015 | NetBSD 9.0 |