0

我有一部分 C 程序:

    char buf[256];
    fprintf(stderr, "buf created. going to freopen. Path:\n");
    fprintf(stderr, path);
    fprintf(stderr, "\n");

    if (!freopen(path, "a", stderr)) {
        fprintf(stderr, "if entered\n");
        fprintf(stderr, "Can't redirect stderr\n");
        sprintf(buf, "Server can't open log file (%s)", path);
        fprintf(stderr, "sprintf ok. going to send_message\n");
        send_message(buf, config.maintenance_delay);
        fprintf(stderr, "send_message ok\n");
        exit(1);
    }
    fprintf(stderr, "ndef USING_FCGI, ended\n");

它的输出是:

buf created. going to freopen. Path:
../log_andrewwhynot/scheduler.log
Segmentation fault

所以,我认为问题出在 freopen() 函数中,但我无法弄清楚它有什么问题。我已经仔细检查了文件的路径(它存在并且访问权限一切正常),甚至尝试硬编码绝对路径或使用另一个文件的路径,但一切都是徒劳的。然后,我尝试打开文件以进行写入操作而不是追加,但它也没有帮助。那么,可能出了什么问题?为什么调用会导致 SIGSEGV?

谢谢!

架构:arm64

操作系统:armbian nightly 5.41.180312

gcc 版本:(Ubuntu GLIBC 2.23-0ubuntu10)2.23

4

0 回答 0