从已删除的文件中读取

时间:2013-01-03 20:16:32

标签: c linux file filesystems libc

我在C中写了一个小程序,我成功打开了一个文件,然后叫睡眠20秒。在那20秒我用shell中的rm删除了打开的文件。睡眠后,程序成功读取数据并将其打印在屏幕上。

int bytes_read;
FILE *fp = fopen("/tmp/file", "r");
sleep(20);
bytes_read = fread(buf, 1, 5, fp);
buf[bytes_read] = '\0';
printf("%s", buf);

我希望它读取0个字节,但它会在文件中打印实际数据。这种行为背后的解释是什么。

1 个答案:

答案 0 :(得分:11)

在linux和其他POSIX系统中,您不会删除文件。您只需从目录中删除inode。只要在文件上打开文件描述符,就不会删除它。只有当inode的最后一个链接和最后一个打开的文件描述符消失时才会消失。