Thanks Jeff, that helps.  But in this case the rename deletes
a file (with the same name) that's still open (and locked), 
and so the inode is going away, right?

I suppose the OS doesn't care since it was opened read-only, 
but it sure feels cheesy to me.

-- Rod
   http://www.sunsetsystems.com/

On Monday 24 June 2002 02:45 pm, Jeff Newmiller wrote:
> On Mon, 24 Jun 2002, Rod Roark wrote:
> > I'm looking at some Perl code (not mine) that does this
> > (simplified for clarity):
> >
> >   open(INFILE, "<$filename");
> >   flock INFILE, LOCK_EX;
> >   open(OUTFILE, ">$tempname");
> >   flock OUTFILE, LOCK_EX;
> >   ...
> >   (read from INFILE, change stuff, write to OUTFILE)
> >   ...
> >   rename $tempname, $filename;
> >   flock OUTFILE, LOCK_UN;
> >   close(OUTFILE);
> >   flock INFILE, LOCK_UN;
> >   close(INFILE);
> >
> > Notice that it's renaming/deleting files that are open and
> > locked.  Is this as insane as I think it is?
>
> No, it is not insane at all, if you are using a *nix-style filesystem.
>
> Think of rename as "mv"... it doesn't affect the file, rather it alters
> the directory entries that point at the file (inode).  No deletion is
> occurring, and any processes accessing the file are doing so through the
> inode, which is unaffected.
>
> This behaviour allows you to mv a logfile even while it is being written
> to, for example.  The process writing to the logfile cares not what you
> call it, and the next process to attempt to open the logfile finds no
> inode for that filename, and creates the new inode as needed.
>
> I hate the tied data/filename aspect of MSDOS/Windows that makes such
> tasks a b***h to implement.

_______________________________________________
vox-tech mailing list
[EMAIL PROTECTED]
http://lists.lugod.org/mailman/listinfo/vox-tech

Reply via email to