我有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 5.41.180312
gcc版本 :( Ubuntu GLIBC 2.23-0ubuntu10)2.23