truncating an open (locked) file

Richard Kuhns rjk at sawmill.UUCP
Thu May 18 01:22:12 AEST 1989


In an earlier article, I asked for a portable way to truncate (to size 0)
an open file, in the following situation:

	open the file (for writing);
	try to lock the file exclusively;
	if (I can't)
	    tell user someone else is running this program;
	    exit;
	endif
	truncate the file (size 0);	<--- how do I do this?
	start writing;

I received several responses (which I greatly appreciate), which basically
said the same thing -- truncate it by open(2)ing it a second time with the
O_TRUNC flag set, and then close the excess file descriptor.  This works
fine (and is the method I'm currently using), with the following proviso:
Don't close(2) the second file descriptor!  If you close *either* file
descriptor, the lock goes away.  At least, it does on a 3B1 running 3.51 --
is this behaviour standard?

For this particular application the extra baggage hasn't been a problem, but
with several database applications we're running awfully close to the edge
(18 active file descriptors), and I can't afford to waste one if there's
a way around it.

So now, I have a slight variation of my original question:  Does anyone
have a portable way to truncate (to size 0) an open file, which both
maintains an existing lock on the file and doesn't waste a file
descriptor?

Once again, Thanks in Advance...

Rich Kuhns
pur-phy!sawmill!rjk



More information about the Comp.unix.questions mailing list