libstdbuf
—
preloaded library to change standard streams initial
buffering
The libstdbuf
library is meant to be
preloaded with the LD_PRELOAD
environment variable
to as to change the initial buffering of standard input, standard output and
standard error streams.
Although you may load and configure this library manually, an
utility,
stdbuf(1),
can be used to run a command with the appropriate environment variables.
Each stream can be configured independently through the following
environment variables (values are defined below):
_STDBUF_I
- Initial buffering definition for the standard input stream
_STDBUF_O
- Initial buffering definition for the standard output stream
_STDBUF_E
- Initial buffering definition for the standard error stream
Each variable may take one of the following values:
- "0"
- unbuffered
- "L"
- line buffered
- "B"
- fully buffered with the default buffer size
- size
- fully buffered with a buffer of size bytes (suffixes
'k', 'M' and 'G' are accepted)
In the following example, the stdout stream of the
awk(1)
command will be fully buffered by default because it does not refer to a
terminal. libstdbuf
is used to force it to be
line-buffered so
vmstat(8)'s
output will not stall until the full buffer fills.
# vmstat 1 | LD_PRELOAD=/usr/lib/libstdbuf.so \
STDBUF_1=L awk '$2 > 1 || $3 > 1' | cat -n
See
stdbuf(1)
for a simpler way to do this.
The libstdbuf
library first appeared in
FreeBSD 8.4.
The original idea of the libstdbuf
command
comes from Padraig Brady who implemented it in the
GNU coreutils. Jeremie Le Hen implemented it on
FreeBSD.