C 中发生分段错误后关闭文件

问题描述 投票:0回答:2

我有一个简单的程序正在运行,并在整个过程中打开一个记录器文件。我在网上研究了一下,据说当调用

exit()
函数或
main
函数返回时,文件会自动关闭。但是,它没有说明程序在执行过程中是否崩溃。

因此,有没有一种方法可以在程序崩溃后手动甚至自动关闭文件?

c segmentation-fault
2个回答
0
投票

现代操作系统会自动清理操作系统资源,例如文件和分配的内存,因此在发生此类崩溃后文件将被关闭。但是,如果使用标准库 I/O(FILE* 甚至 C 低级文件描述符),则可能存在尚未属于操作系统文件视图一部分的缓冲写入。那些无缓冲的写入很可能就消失了。

但是,更普遍接受的正确答案是以这样的方式编码,一开始就不会出现此类异常。


0
投票

您可以使用信号:

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.