C未关闭日志文件不能写日志的问题

bisal(Chen Liu)
博客专家认证
2011-11-08 03:44:28
一个c程序,每次执行时会执行:
File *log;
log = fopen(logname,"a+");

void mylog(File *f, char *format, ...){
va_list arg;
va_start(arg, format);
if(!f) return;
if(!format){
if(f) fclose(f);
f = NULL;
}
vfprintf(f, format, arg);
va_end(arg);
fflush(f);
}
打开一个日志文件,然后向文件内写入日志信息,如果某个逻辑没有fclose(log),之后再执行这个c程序就发现不会向日志中写入信息了,请问这里if(!f)应该由于f未关闭处于false,不会return,这样就会执行下面的逻辑,那就应该可以写入啊?

谢谢!
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bisal(Chen Liu) 2011-11-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kingstarer 的回复:]

你的函数怎么发现format为空时就关闭文件 然后又往里面写数据
[/Quote]

只是不写日志,还会执行操作。
我现在的问题是不写入日志的原因是否是之前未fclose日志文件变量指针呢?
kingstarer 2011-11-08
  • 打赏
  • 举报
回复
你的函数怎么发现format为空时就关闭文件 然后又往里面写数据
bisal(Chen Liu) 2011-11-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 studycbc 的回复:]

LZ的问题是关于对同一文件进行续写的问题,这个只要做好标识,进行文件偏移,让写入的指针总是指向文件末尾就行了

fseek(FILE *fp,0L,SEEK_END);//偏移到文件末尾,然后执行fwrite
[/Quote]


可能我没有说清楚,我在追踪一个问题原因,有个程序写入日志,但其中有个逻辑没有fclose()这个日志文件指针变量,现在不向该日志文件写入信息,但程序可以执行,所以想看看其原因是什么?从mylog中我没有看到当日志未关闭时退出的逻辑。
七擒关羽 2011-11-08
  • 打赏
  • 举报
回复
LZ的问题是关于对同一文件进行续写的问题,这个只要做好标识,进行文件偏移,让写入的指针总是指向文件末尾就行了

fseek(FILE *fp,0L,SEEK_END);//偏移到文件末尾,然后执行fwrite
bisal(Chen Liu) 2011-11-08
  • 打赏
  • 举报
回复
一个File指针变量未执行fclose(),然后又用fopen打开该文件写入,就会出现无法写入的情况?
linguimin 2011-11-08
  • 打赏
  • 举报
回复
所以在fclose之前,并不能保证所有数据已经存进硬盘。
如果你想即时保存数据的话,就必须频繁fopen、fclose频繁读写硬盘。

我推荐这样,你在内存上划出一块空间,专门存放日志,等累积到一定数量再由你控制fopen、fclose一次写入。
linguimin 2011-11-08
  • 打赏
  • 举报
回复
我发现,用C语言写入文件,如果数据太琐碎的话,它会先放在缓存里,并不写进硬盘。
等到累积到一定数量才会一次性写入。

如果fclose的话,就是摆明了不再写数据了,所以就会把数据往硬盘存完了才会关闭文件。

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧