【发布时间】:2015-03-13 20:05:41
【问题描述】:
我正在使用以下代码将模拟输出写入文件
sprintf(filename, "time_data.dat");
FILE *fp = fopen(filename,"w");
for(i=0;i<ntime;i++){
compute_data();
fprintf(fp, "%d %lf %lf \n", step, time_val ,rho_rms);
}
return;
在我的桌面上,我可以看到文件 time_data.dat 每隔几个小时更新一次(compute_data() 每个时间步需要几百秒,在 i7 机器上使用 OpenMP)。我现在已将作业提交到集群节点(运行 ubuntu 服务器的 E5 2650 处理器)。我已经等了5天了,文件中还没有出现一行。我愿意
tail -f time_data.dat
检查输出。模拟还需要几周时间才能完成。我迫不及待地想看看我的输出是否好。有没有办法可以探测节点中的操作系统以刷新其缓冲区而不干扰计算?如果我现在取消工作,我肯定不会有任何输出。 请注意,写入输出文件的硬盘是使用 NFS 在多个节点和主节点上共享的硬盘。这会造成什么麻烦吗?是否有一个临时文件位置实际上正在写入输出?
PS:我做了 du -h 来找到显示大小为 0 的文件。我还尝试了 ls -l proc/$ID/fd 来确认文件确实打开了。
【问题讨论】:
-
只是一个建议:检查
fopen()是否成功。 -
如果你这样做
du -h time_data.dat会发生什么? -
当我执行 du -h 时,我得到 '0 time_data.dat' 作为输出。