Document limitations on streams passed to freopen

Joseph Myers josmyers@redhat.com
Thu Sep 5 21:50:03 GMT 2024


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".

diff --git a/manual/stdio.texi b/manual/stdio.texi
index 29888a361f..d07b3e5ad6 100644
--- a/manual/stdio.texi
+++ b/manual/stdio.texi
@@ -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
 32 bit machine this function is in fact @code{freopen64} since the LFS
 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 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
 
 @deftypefun {FILE *} freopen64 (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream})

-- 
Joseph S. Myers
josmyers@redhat.com



More information about the Libc-alpha mailing list