我有一个简单的程序正在运行,并在整个过程中打开一个记录器文件。我在网上研究了一下,据说当调用
exit()
函数或 main
函数返回时,文件会自动关闭。但是,它没有说明程序在执行过程中是否崩溃。
因此,有没有一种方法可以在程序崩溃后手动甚至自动关闭文件?
现代操作系统会自动清理操作系统资源,例如文件和分配的内存,因此在发生此类崩溃后文件将被关闭。但是,如果使用标准库 I/O(FILE* 甚至 C 低级文件描述符),则可能存在尚未属于操作系统文件视图一部分的缓冲写入。那些无缓冲的写入很可能就消失了。
但是,更普遍接受的正确答案是以这样的方式编码,一开始就不会出现此类异常。
您可以使用信号:
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#define EXIT_ERR_SIGSEGV
FILE* log;
void closeLog(int sig) {
fclose(log);
exit(EXIT_ERR_SIGSEGV);
}
int main(int argc, char **argv) {
struct sigaction sa;
sa.sa_handler = &closeLog;
sigaction(SIGSEGV, &sa, NULL);
return 0;
}