read() on a deleted file

Alex Bligh alex at alex.org.uk
Thu Jan 3 10:49:24 UTC 2008



--On 3 January 2008 16:00:22 +0530 Fasihullah Askiri 
<fasihullah.askiri at gmail.com> wrote:

> I have a doubt regarding the behaviour of read() on an ext3
> filesystem. To elucidate my doubts, I wrote a small program opens a
> file and reads one byte at a time and sleeps for a while. I deleted
> the file while the read was still in progress and I noticed that the
> read still succeeds. How does this work? Does the kernel not free the
> inode when the file is deleted but there is a pending read? To check
> this, instead of deleting, I tried shred-ding the file, the read still
> gets the correct data.

That's standard UNIX behaviour. The file exists on disk until all
references to it have disappeared (references including the open
file handle). All you do by typing "rm" is delete a reference/link to
it from a particular directory, not (necessarily) delete the file.
That's why the system call is called "unlink".

Alex




More information about the Ext3-users mailing list