我在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字节,但它会在文件中打印实际数据。这种行为背后的解释是什么。
磁盘上的数据没有根除,只有inode被删除。并且只有在文件上的所有打开的句柄都关闭之后。 –
如果文件被重命名,这也是真的吗? – 0xhacker
原理相同。你已经打开了一个文件,操作系统不会将它从你的脚下拉开。 –