【问题标题】:What happens if you exit a program without doing fclose()?如果你在没有执行 fclose() 的情况下退出程序会发生什么?
【发布时间】:2011-09-10 07:47:03
【问题描述】:

问题:

如果我退出程序而不关闭文件会发生什么?

是否发生了一些不好的事情(例如,某些操作系统级别的文件描述符数组没有被释放..?)

两种情况下的答案都是一样的

  • 程序退出
  • 意外崩溃

代码示例:

程序退出我的意思是这样的:

int main(){
    fopen("foo.txt","r");
    exit(1);
}

对于意外崩溃,我的意思是这样的:

int main(){
    int * ptr=NULL;
    fopen("foo.txt","r");
    ptr[0]=0;  // causes segmentation fault to occur
}

附言

如果答案取决于编程语言,那么我想了解 C 和 C++。

如果答案取决于操作系统,那么我对 Linux 和 Windows 的行为很感兴趣。

【问题讨论】:

    标签: file fopen exit


    【解决方案1】:

    这取决于你如何退出。在受控情况下(通过exit() 或从main() 返回),(输出)缓冲区中的数据将被刷新,文件以有序的方式关闭。该进程拥有的其他资源也将被释放。

    如果您的程序崩溃失控,或者如果它调用了替代的_exit() or _Exit() 函数之一,那么系统仍将清理(关闭)打开的文件描述符并释放其他资源,但不会刷新缓冲区等。

    【讨论】:

      【解决方案2】:

      操作系统会为您整理好。这就像去拜访朋友一样——关上浴室的门而不让他们为你做是有礼貌的。

      【讨论】:

      • 很好的比喻哈哈
      【解决方案3】:

      属于您的进程的所有句柄都将被清理。然而,任何“命名”内核对象,如命名管道和其他对象都会保留。

      【讨论】:

        猜你喜欢
        • 2016-09-12
        • 2021-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 2011-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多