Failure to rename files that have active file handles

David Collier-Brown davecb at Canada.Sun.COM
Tue Nov 17 21:13:42 GMT 1998


You wrote:
| However we have come across one little problem, which may be down to
| configuration, that has left us "worried" about ditching our NFS 
| solution completely. That is we seem to be unable to rename a file
that
| has an open file handle (either owned by the same process doing the
| rename or a different process), this is not a problem on a local NT
| drive or on an NFS mounted drive. This showed up in "makedepend" which
| has code like this:

| fdin = fopen("Makefile",...)
| rename("Makefile","Makefile.bak")
| fdout = freopen("Makefile","w",stdout)  

	Er: that's wrong.
	The algorithm you're thinking of is
		1) copy x x.bak
		2) open x and rewind
		4) while reading x.bak, rewrite x.
	This preserves the permissions on the file, and
	tends to leave it in a recoverable state for as
	long as possible, while always leaving a .bak file
	in a sane state.

	The algorith's a variant on "how to update a master file"
	from the ACM, back in the algol/fortran days.  And it
	is one that Windows locking allows...

--dave
-- 
David Collier-Brown,  | Always do right. This will gratify some people
185 Ellerslie Ave.,   | and astonish the rest.        -- Mark Twain
Willowdale, Ontario   | http://java.science.yorku.ca/~davecb
Work: (905) 477-0437, Home: (416) 223-8968, Email: davecb at canada.sun.com


More information about the samba mailing list