我不是 C 方面的专家,我正在寻找一些建议来使我的程序更加健壮和可靠。只是为了提供一些背景信息:我编写了一个程序来执行一些科学计算,该程序需要相当长的时间(大约 20 小时),我正在使用 SLRUM 调度系统和 NFS 安装的文件系统在大型大学 HPC Linux 集群上执行。似乎发生的情况是,在 20 小时内的某个时间,与文件系统的连接变得陈旧(在整个计算机上;独立于我的程序),并且第一次尝试打开和写入文件需要很长时间,这会导致segfault cored dumped 错误,到目前为止我还无法精确追踪。下面是一个最小文件,至少在概念上重现了该错误:程序启动,打开一个文件,一切正常。该程序进行了一些长时间的计算(由 sleep() 模拟),尝试再次打开并写入同一文件,但失败了。有哪些约定可以使我的代码更加健壮并可靠地将结果写入文件而不会崩溃?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv) {
// Declare variables
FILE *outfile;
char outname[150] = "result.csv";
// Open file for writing
printf("CHECKING if output file '%s' is writable?", outname);
outfile=fopen(outname, "w");
if (outfile == NULL) {
perror("Failed: ");
exit(EXIT_FAILURE);
}
fclose(outfile);
printf(" PASSED.\n");
// Do some computation that takes really long (around 19h)
sleep(3);
// Open …Run Code Online (Sandbox Code Playgroud)