fopen文件后,如果不fclose,程序也不退出会不会内存泄露?

honemay 2010-05-27 03:39:29
我每秒钟都需要写数据到一个文件,我只fopen一次,然后用fputs和fflush来更新文件内容
但我不fclose...是不是缓冲区一直会写而不释放?
...全文
1174 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
honemay 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 akirya 的回复:]
你要写上千次的话干嘛要打开那么多次,打开一次关闭一次。
[/Quote]
我的做法就是只打开和关闭一次..
这个问题主要是我现在运行过程中产生了内存泄露,自己看代码没找出问题,然后对文件操作不够理解,才以为是没有fclose而产生的问题..
现在解决了!
多谢各位的指点..今天又学到了!!
  • 打赏
  • 举报
回复
你要写上千次的话干嘛要打开那么多次,打开一次关闭一次。
honemay 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 tu_lq 的回复:]
既然你是一天一个log文件,一次fclose就够了,只要保证fclose最终可以调用到,不就可以了么?甚至连fflush都不用,除非你马上想看结果,等它缓冲满再输出不也可以么?
[/Quote]
多谢指教。
我每天凌晨的定时器会关闭当前的文件指针,然后再打开新的文件..
我现在用fflush,是因为我对这些操作还不够理解!!
现在看来,我确实不需要fflush
honemay 2010-05-27
  • 打赏
  • 举报
回复
fflush已经清空了缓冲区..
我的程序的内存泄露原来是我自己很隐蔽的一个new既然没释放..
真够隐蔽的!!!
Myth_cn 2010-05-27
  • 打赏
  • 举报
回复
这样是不行的。系统对打开的文件数是有限制的,只打开不关闭的话很快就会达到上限,这时再打开文件就会失败。建议在打开新文件的时候关闭上一次打开的文件
toplinq 2010-05-27
  • 打赏
  • 举报
回复
既然你是一天一个log文件,一次fclose就够了,只要保证fclose最终可以调用到,不就可以了么?甚至连fflush都不用,除非你马上想看结果,等它缓冲满再输出不也可以么?
honemay 2010-05-27
  • 打赏
  • 举报
回复
不可能不fclose就会内存泄露把?
肯定有相关的函数可以把缓冲区清空的,只是我现在正在找..
我对文件操作不是很熟练啊!!学习中。
ex_dijkstra 2010-05-27
  • 打赏
  • 举报
回复
fflush倒是可以满足情况,将缓存里的数据刷新到文件中,但是不fclose肯定会内存泄露吧。。。
honemay 2010-05-27
  • 打赏
  • 举报
回复
我在main里面
sprintf(filename,"./log/lrc.log.%04d-%02d-%02d",p->tm_year+1900, p->tm_mon+1 ,p->tm_mday);

recordFile = fopen(filename, "a+");

然后在writelog函数里写 //这个函数程序运行中,1秒钟会被调用上千次
fputs(recordData, recordFile);//recordData就是需要写入文件的数据
fflush(recordFile);

我的fclose是在一个定时器里写的,因为日志文件一天一个!
honemay 2010-05-27
  • 打赏
  • 举报
回复
我1秒钟可是需要执行上千次的文件写操作!同一个文件!
ex_dijkstra 2010-05-27
  • 打赏
  • 举报
回复
贴代码看看?
honemay 2010-05-27
  • 打赏
  • 举报
回复
但是每次都fopen和fclose不浪费性能么?
那我每1秒钟可是要上千次的fopen和fclose啊?
ex_dijkstra 2010-05-27
  • 打赏
  • 举报
回复
fopen完在程序最后还是要fclose保险吧。。。
1s中fopen、fclose一次确实浪费效率。。。
  • 打赏
  • 举报
回复
为了安全还是写完就fclose

69,373

社区成员

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

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