当程序在fclose()之前结束时会出现什么问题

时间:2017-07-07 15:40:04

标签: c operating-system

据我所知,不关闭文件是不负责任的,但在以下两个条件下,如果没有调用fclose()会出现什么问题?

1)如果在程序结束时没有调用fclose(),操作系统是否与文件描述符通信以让它知道该文件不再需要并关闭它?

#include <stdio.h>
int main(){
    FILE* f = open("sample.txt","r");
    return 0;
};

如果明确退出,例如exit(1)它在上一个示例中只是返回有什么不同吗?

#include <stdio.h>
int main(){
    FILE* f = fopen("sample.txt","r");
    exit(1);
    return 0;
}

2)在调用fclose()之前发生潜在的分段错误?

#include <stdio.h>
int main(){
    FILE* f = fopen("sample.txt","r");
    int *ptr = NULL;
    *ptr = 1; //seg-fault
    fclose(f);
    return 0;
};

2 个答案:

答案 0 :(得分:2)

如果程序有seg错误,文件处理程序最终将由OS释放,就像程序正常退出一样。但我已经看到了seg'ed程序中的文件处理程序无法立即使用的情况。

以前回答What happens if I don't call fclose() in a C program?

的更多详细信息

答案 1 :(得分:0)

如果使用exists,则在C语言中,exit函数调用使用atexit注册的所有函数并终止程序。刷新文件缓冲区,关闭流,删除临时文件。

即使你不操作系统应该在终止后释放所有程序资源。虽然不清理是一种可能导致严重问题的坏习惯。