[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#8961: stdbuf has no effect on some programs
From: |
Pádraig Brady |
Subject: |
bug#8961: stdbuf has no effect on some programs |
Date: |
Fri, 01 Jul 2011 10:53:32 +0100 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.8) Gecko/20100227 Thunderbird/3.0.3 |
On 01/07/11 10:03, Bruno Haible wrote:
> Hi Pádraig,
>
>> Essentially, setting non buffered input is to limit what
>> the app reads (so that a subsequent app may further process stdin),
>> rather than changing the responsiveness to input.
>
> Oh, really? This ought to be documented and emphasized.
>
> I was under the impression - because "stdbuf -i 0" translates into a
> call to setvbuf (stdin, ..., _IONBF) and because the man page of setvbuf
> says
> "When an output stream is unbuffered, information
> appears on the destination file or terminal as soon as written"
> - that asking for no buffering would also imply immediate responsiveness.
>
>>> Can you name a single program on which -i0 works?
>>
>> Programs that use getline() for example (like sed).
>> They will change to reading 1 char at a time,
>> as will programs that use [f]getc().
>
> I see. So in summary we can say:
> - stdbuf works only on programs that use stdio, because setvbuf calls
> have no effect on the behaviour of read() and write(),
> - If a program only calls [f]getc and processes input immediately,
> then stdbuf -i 0 will have the desired effect (unbuffered input,
> implying no blocking).
> - If a program only calls [f]getc or getline() and processes input
> immediately, then stdbuf -i L will have the desired effect
> (line-buffered input, implying no blocking after a line ends).
> - If a program calls fread() of an entire block, or has logic to call
> [f]getc() until a fixed-size buffer is filled, then stdbuf -i 0
> and stdbuf -i L will have no effect.
All right, except that we disabled -iL as it's ineffective
and would only add more confusion IMHO.
I was going with this patch:
doc: detail the effect of disabling input buffering with stdbuf
* docs/coreutils.texi (stdbuf invocation): Expand on the different
reasons for disabling buffering on input and output.
diff --git a/doc/coreutils.texi b/doc/coreutils.texi
index f74dd1c..ad65cff 100644
--- a/doc/coreutils.texi
+++ b/doc/coreutils.texi
@@ -15437,8 +15437,13 @@ This option is invalid with standard input.
@item 0
Disable buffering of the selected stream.
-In this mode data is output immediately and only the
+In this mode, data is output immediately and only the
amount of data requested is read from input.
+Note the difference in function for input and output.
+Disabling buffering for input will not influence the responsiveness
+or blocking behavior of the stream input functions.
+For example @code{fread} will still block until @code{EOF} or error,
+even if the underlying @code{read} returns less data than requested.
@item @var{size}
Specify the size of the buffer to use in fully buffered mode.
- bug#8961: stdbuf has no effect on some programs, Bruno Haible, 2011/07/01
- bug#8961: stdbuf has no effect on some programs,
Pádraig Brady <=
- bug#8961: stdbuf has no effect on some programs, Bruno Haible, 2011/07/03
- bug#8961: stdbuf has no effect on some programs, Bruno Haible, 2011/07/03
- bug#8961: stdbuf has no effect on some programs, Pádraig Brady, 2011/07/03
- bug#8961: stdbuf has no effect on some programs, Pádraig Brady, 2011/07/04
- bug#8961: stdbuf has no effect on some programs, Paolo Bonzini, 2011/07/04
- bug#8961: stdbuf has no effect on some programs, Eric Blake, 2011/07/05
- bug#8961: stdbuf has no effect on some programs, Pádraig Brady, 2011/07/05
- bug#8961: stdbuf has no effect on some programs, Eric Blake, 2011/07/05