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

mks*_*mks 9 fopen file exit

题:

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

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

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

  • 程序退出
  • 意外崩溃

代码示例:

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

int main(){
    fopen("foo.txt","r");
    exit(1);
}
Run Code Online (Sandbox Code Playgroud)

意外崩溃我的意思是这样的:

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

PS

如果答案是编程语言依赖,那么我想知道C和C++.

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

Jon*_*ler 8

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

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