From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KeBxa-00084b-Ih for qemu-devel@nongnu.org; Fri, 12 Sep 2008 12:57:30 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KeBxX-00083Z-4L for qemu-devel@nongnu.org; Fri, 12 Sep 2008 12:57:30 -0400 Received: from [199.232.76.173] (port=58911 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KeBxW-00083W-RW for qemu-devel@nongnu.org; Fri, 12 Sep 2008 12:57:26 -0400 Received: from mail2.shareable.org ([80.68.89.115]:55442) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KeBxW-0008AK-LT for qemu-devel@nongnu.org; Fri, 12 Sep 2008 12:57:27 -0400 Received: from jamie by mail2.shareable.org with local (Exim 4.63) (envelope-from ) id 1KeBxN-0003Vm-7L for qemu-devel@nongnu.org; Fri, 12 Sep 2008 17:57:17 +0100 Date: Fri, 12 Sep 2008 17:57:17 +0100 From: Jamie Lokier Subject: Re: [Qemu-devel] How are the temporary files (-snapshot) created on Linux? Message-ID: <20080912165716.GB12849@shareable.org> References: <200809121218.50167.yann.morin.1998@anciens.enib.fr> <1221218698.7793.0@ecrins> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1221218698.7793.0@ecrins> Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Steve Fosdick wrote: > On 12/09/08 11:18:50, Yann E. MORIN wrote: > > Hello! > > > > On Friday 12 September 2008 08:04:02 EQX wrote: > > > The code says the -snapshot temporary files are created here: > > > /tmp/vl.*, but they are never visible for users. Using lsof, > > > they have a state of 'deleted'. How does this work exactly? > > > What type of file is this? > > > > It's done via some incantation of open(2) followed by unlink(2), > > something > > like: > > > > int fd; > > fd = open( "/tmp/vl.xxx", O_CREAT|... ); > > unlink( "/tmp/vl.xxx" ); > > /* Use the file somehow */ > > close( fd ); > > > > Regards, > > Yann E. MORIN. > > There is nothing special about the files concerned. The key to this is > that, unlike some other operating systems, Linux (like Unix) allows an > open file to be deleted and has a well defined way to deal with that > happenning. > > When an open file is deleted only the file name is actually deleted. > The data in the file (and any new data written to the file) are kept > until the last process to have the file open closes the file whereupon > the second half of the delete happens, i.e. deallocating the disk > storage and returning it to the free space. > > This mechanism is exploited by a process that opens a file and > immediately deletes it like the example above for two reasons: > > 1. It provides a way to guarantee that the file not exist after the > process concerned has finished even if it finishes abnormally or gets > killed for some reason. > > 2. As a security measure. Once the file name has been deleted there is > no way for any other process to stumble upon the file and open it. > > The second point is negated somewhat by the /proc filesystem. Also both points are negated for a brief time window by the fact you have to have the file exist momentarily - there's no O_UNLINK flag to open. -- Jamie