如果在不执行fclose()的情况下退出程序会发生什么?

时间:2011-09-10 07:47:04

标签: file fopen exit

问题:

如果我在不关闭文件的情况下退出程序会怎样?

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

在两种情况下答案相同

  • 编程退出
  • 意外崩溃

代码示例:

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

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
}

P.S。

如果答案是编程语言依赖,那么我想了解C和C ++。

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

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

操作系统为您整理。这就像是去找朋友一样 - 关上卫生间的门并不让他们为你做这件事是礼貌的。

答案 2 :(得分:1)

将清理属于您的流程的所有句柄。但是,任何“named”内核对象(如命名管道和其他对象)都会存在。