arnold@skeeve.com wrote:
Adding a setvbuf() call didn't work.
Using freopen() instead of playing games with the file descriptor
might work, but it's also a hassle.
Andy - can you look at this? Try: in inplace_begin
- dup stdout to a new fd and save it as now
- do freopen on stdout to the file. this should set block buffering
In inplace_end, do freopen of /dev/fd/NNN where NNN is the duped
fd from the original stdout.
Thanks,
Arnold
I spent a bunch of time on this and could not make anything
work. So I'm going with a documentation patch.
Arnold
----------------------
diff --git a/doc/gawk.texi b/doc/gawk.texi
index a093cb08..769c82c5 100644
--- a/doc/gawk.texi
+++ b/doc/gawk.texi
@@ -39495,6 +39495,11 @@ For each regular file that is processed, the extension
redirects
standard output to a temporary file configured to have the same owner
and permissions as the original. After the file has been processed,
the extension restores standard output to its original destination.
+(Due to this implementation, it helps to redirect @command{gawk}'s
+standard output to @file{/dev/null}, instead of leaving it set to
+your terminal, so that output will be block-buffered instead of
+line-buffered.)
+
If @code{inplace::suffix} is not an empty string, the original file is
linked to a backup @value{FN} created by appending that suffix. Finally,
the temporary file is renamed to the original @value{FN}.