检查这个程序。
#include <stdio.h>
int main() {
FILE* f;
char x[100];
f = fopen("a.txt","r");
int a = remove("a.txt");
sleep(5);
fgets(x,100,f);
printf("Remove() : %d\nFile Content : %s\n",a,x);
printf("fclose() : %d\n",fclose(f));
return 0;
}
在上面的代码中,文件在读取内容之前就被删除了。但它仍然有效并成功关闭文件,状态为 0。
输出
$ echo hello > a.txt
$ gcc a.c && ./a.out
Remove() : 0
File Content : hello
fclose() : 0
最佳答案
它取决于操作系统/实现。在 Linux 上,该文件实际上是“等待删除”,这意味着自从该文件被打开后,内核就会“等待”该文件关闭,然后才能真正释放该文件占用的空间。
执行lsof
(也许延长 sleep
,让您有时间执行此操作)
lsof | grep file
表明您的程序进程维护着打开的文件 ( lsof man page )。
关于C - 即使文件被删除后仍读取文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47503394/