C - 即使文件被删除后仍读取文件内容

标签 c

检查这个程序。

#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/

相关文章:

c - 涉及静态变量和 fprintf 的奇怪 C 行为

c - 两个链表相乘输出错误

c - Windows过滤器驱动上的32位_asm代码到64位汇编代码

c - Switch 语句在我的 C 程序中不起作用?

c - C语言中switch语句中如何使用字符串?

c - 为什么 C 没有 snwprintf 函数?

c - 最后修改字段和下载文件

c - 获取整数位数

c - BST 实现函数中的段错误

c - 如何使 GCC 编译以便二进制文件使用新的共享对象?