ELVIS WARNING - LOST CLUSTERS ON PC's

Tim Wright tim at delluk.uucp
Sat Sep 1 01:24:05 AEST 1990


In <689 at aut.UUCP> nbladt at aut.UUCP (Norbert Bladt) writes:

>tjr at cbnewsc.att.com (thomas.j.roberts) writes:

>>Following up to my previous posting on successfully building elvis:

>>BEWARE! elvis is NOT cleaning up properly - it leaves LOST CLUSTERS
>>on the temp disk.
...
>I had the same problem with a program ported from UNIX to MS-DOS.
>On UNIX (every flavour) it is possible to do the following (this
>may not be correct on UNIX, just to give you the idea what happens,
>no runtime checks included):


>	char *TmpFileName, mktemp();
>	FILE TmpFile, fopen();

>		/* Create a unique name for temp. file */
>	TmpFileName = mktemp ("/tmp/pipapoXXXXXX");

>		/* open temp. file */
>	TmpFile = fopen (TmpFileName, "r+");

>	unlink (TmpFileName);	/* delete temporary file.
>				   However, it is NOT deleted,
>				   because it has been opened by
>				   an application, i.e. this program !
>				*/

>	/* Do the usual fread and fwrite operations here */

>	exit();	/* this will close and delete the temporary file */

>If you do this on MS-DOS it will create lost clusters.
>On VMS it simply doesn't work (error reported by unlink).
>If you ignore the error code of the unlink (which most programs do :-( )
>the temporary file is still existing after your application did exit.
>Since it is the temp disk you are having problems with, this rang a bell
>in me.

This style of programming is *perfectly* valid under UNIX. It is part
of the UNIX filesystem semantics and is a good way of creating a
temporary file that nobody can mess up (excepting race conditions),
even without the BSD-style protected tmp directories. It also avoids
leaving the temporary file around in the case of the process
receiving a kill -9. However, as you noted, this causes problems
elsewhere (although what DOS does just shows how poor DOS is). NFS has
a special work around for this case, since it is used in other UNIX
code, and cannot be properly handled by a truly stateless server.
I'm sure it will be helpful to people that to know where the problem
lies. Thanks,

Tim
--
Tim Wright, Unix Support               | Email: ...!ukc!delluk!tim
Dell Computer Corp. (UK), Bracknell    | (pending domain registration).



More information about the Alt.sources mailing list