This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Buffered output/Forked processes


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/


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]