Document limitations on streams passed to freopen

As recently discussed, document that freopen does not work with
streams opened with functions such as popen, fmemopen, open_memstream
or fopencookie.  I've filed
<https://austingroupbugs.net/view.php?id=1855> to clarify this issue
in POSIX.

Tested with "make info" and "make html".
This commit is contained in:
Joseph Myers 2024-09-06 20:38:23 +00:00
parent 7d6e30b4b4
commit a2509a8bc9

View File

@ -330,6 +330,14 @@ this ability, so using @code{freopen} is more portable.
When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
32 bit machine this function is in fact @code{freopen64} since the LFS 32 bit machine this function is in fact @code{freopen64} since the LFS
interface replaces transparently the old interface. interface replaces transparently the old interface.
@Theglibc{} only supports use of @code{freopen} on streams opened with
@code{fopen} or @code{fopen64} and on the original values of the
standard streams @code{stdin}, @code{stdout}, and @code{stderr}; such
a stream may be reopened multiple times with @code{freopen}. If it is
called on another kind of stream (opened with functions such as
@code{popen}, @code{fmemopen}, @code{open_memstream}, and
@code{fopencookie}), @code{freopen} fails and returns a null pointer.
@end deftypefun @end deftypefun
@deftypefun {FILE *} freopen64 (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream}) @deftypefun {FILE *} freopen64 (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream})