develooper Front page | perl.perl5.porters | Postings from May 2003

Re: [perl #22339] IO::Handle::setvbuf not defined properly

Thread Previous | Thread Next
From:
Graham Barr
Date:
May 28, 2003 07:57
Subject:
Re: [perl #22339] IO::Handle::setvbuf not defined properly
Message ID:
20030528155656.O50488@pobox.com
On Wed, May 28, 2003 at 08:58:21AM -0400, Mark Jason Dominus wrote:
> Rafael Garcia-Suarez <rgarciasuarez@free.fr>:
> > setbuf/setvbuf aren't available with a PerlIO-enabled perl.
> 
> Thanks.
> 
> Here's my problem.  I want two processes to access the same (small)
> file concurrently.  Process A reads part of the file.  Process B
> modifies part of the file.  Then process A wants to see the change.
> But it can't, because the block it just read is buffered, and
> subsequent reads are all coming from the buffer, which records the
> state of the file before the change, instead of from the real file.
> 
> I thought my choices were
> 
> a) use setvbuf() to discard the buffer, perhaps temporarily, or
> 
> b) discard the buffered I/O system entirely and rewrite everything in
> terms of sysread(), effectively reimplementing the entire buffered I/O
> subsystem in Perl.
> 
> But now it appears that my only choice is (b).  This isn't very
> attractive.  Is there some other option I've overlooked?

You could try using seek.

 my $pos = tell($fh);
 seek($fh,0,0);
 seek($fh,$pos,0);

Graham.

Thread Previous | Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About