如果我在不关闭文件的情况下退出程序会怎样?
是否发生了一些不好的事情(例如,某些操作系统级别的文件描述符数组未被释放..?)
在两种情况下答案相同
对于程序退出,我的意思是这样的:
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行为感兴趣。
答案 0 :(得分:8)
这取决于你如何退出。在受控情况下(通过exit()
或从main()
返回),将刷新(输出)缓冲区中的数据并以有序的方式关闭文件。该进程的其他资源也将被释放。
如果您的程序崩溃失控,或者它调用其中一个替代_exit()
or _Exit()
函数,那么系统仍将清理(关闭)打开的文件描述符并释放其他资源,但缓冲区不会被冲洗等等。
答案 1 :(得分:3)
操作系统为您整理。这就像是去找朋友一样 - 关上卫生间的门并不让他们为你做这件事是礼貌的。
答案 2 :(得分:1)
将清理属于您的流程的所有句柄。但是,任何“named”内核对象(如命名管道和其他对象)都会存在。