This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: Buffered output/Forked processes
- From: Reini Urban <rurban at x-ray dot at>
- To: Nuno Leitao <nuno dot leitao at integralis dot com>
- Cc: "'cygwin at cygwin dot com'" <cygwin at cygwin dot com>
- Date: Wed, 13 Oct 2004 14:12:05 +0200
- Subject: Re: Buffered output/Forked processes
- References: <8904DDEEB811D6118AF900508BB832FA080995E0@the-exch-c.ai.pri>
Nuno Leitao schrieb:
I have a Perl script which looks like:
open( VMSTAT, "vmstat 5|" );
VMSTAT->autoflush( 1 );
while( <VMSTAT>) {
print $_;
}
Now, under Linux and other UNIX OS's this works fine, and "print $_" will
print the vmstat output every 5 seconds since the output from vmstat is not
buffered. Under Cygwin however, it seems vmstat will always buffer its
stdout with the undesirable effect that lines come in batches as the output
buffer gets full and is flushed by the Cygwin C libraries.
Is there a way to go around this without having to patch and recompile
vmstat or other binaries I might want to use in this way ?
basic perl question, not cygwin related.
$ perldoc -q buffer
$ perldoc -f select
cygwin perl doesn't honor $| ? not true.
Because you told VMSTAT not to buffer.
But you shold have told it to STDOUT.
open( VMSTAT, "vmstat 5|" );
VMSTAT->autoflush( 1 );
$| = 1; # STDOUT is selected so STDOUT will get unbuffered.
while( <VMSTAT>) {
print $_;
}
--
Reini Urban
http://xarch.tu-graz.ac.at/home/rurban/
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Problem reports: http://cygwin.com/problems.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/