我有一部分 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