From: Joe Van Dyk Date: 2005-10-14T06:43:01+09:00 Subject: Re: Buffering problems On 10/13/05, Joe Van Dyk wrote: > I'm trying to redirect stdout and stderr of a program to a log file. > > So, I'm doing something like: > > $stdout.sync = true > $stderr.sync = true > $stdout.reopen File.open(some_log_file, "w") > $stderr.reopen File.open(some_log_file, "w") > > exec 'program' > > Standard out and error are being redirected to the log file, but they > are being buffered. > > Any ideas on why that might be? Just found IO::fsync... --------------------------------------------------------------- IO#fsync ios.fsync => 0 or nil ------------------------------------------------------------------------ Immediately writes all buffered data in _ios_ to disk. Returns +nil+ if the underlying operating system does not support _fsync(2)_. Note that +fsync+ differs from using +IO#sync=+. The latter ensures that data is flushed from Ruby's buffers, but doesn't not guarantee that the underlying operating system actually writes it to disk. I'm running on Linux. Is there any way to force the OS to write data from Ruby's buffers to the disk all that time?