1

我用 C 语言编写了一个小程序,成功打开了一个文件,然后调用 sleep 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 个字节,但它会打印文件中的实际数据。这种行为背后的解释是什么。

4

1 回答 1

11

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

于 2013-01-03T20:19:48.113 回答