快速连续文件写入的危险是什么?

时间:2014-03-03 09:07:36

标签: c logging file-io

我正在研究用C编写的聊天程序的日志记录机制,我不确定与写入文件有关的潜在危险。

我担心垃圾邮件,以及我如何处理每秒可能有几十甚至几百个fopen / fclose个电话,如果这甚至是一个担心的话。现在我填充缓冲区然后在缓冲区已满后将缓冲区的内容写入文件,但即使这样也可能无法缓解大量垃圾邮件攻击,除非缓冲区过大。

我是否过于偏执或这是一个需要照顾的问题?

2 个答案:

答案 0 :(得分:2)

stdio.h I / O函数默认使用缓冲。虽然您可以自由使用自己的缓冲区,但请注意,您可能会过度复杂化日志记录。

如果您计划每秒多次打开和关闭文件,那么保持文件描述符打开更有意义。保持文件打开不会阻止您在程序中写入文件,也不会阻止您从其他程序中读取日志文件(例如,在后台运行程序)。

唯一需要注意的是,使用缓冲日志记录系统时,在程序终止之前可能无法刷新缓冲区。在中,您的缓冲区(或由stdio维护的缓冲区)可能只是部分填充,但崩溃导致缓冲区的内容永远不会被写入。这可能会阻止关键信息用于调试崩溃。

这意味着您应该弄清楚如何捕获可能的错误,并在终止之前flush输出缓冲区。

答案 1 :(得分:1)

首先,你不需要每次fopen / fclose,你可以让文件保持打开状态(如果你担心如果程序崩溃的话,没有写入日志文件的东西,这只适用于 debug 日志,而不是用户日志。

那说,看看其他人做了什么!

通常,deamon会将所有内容写入其日志文件,而不必担心像磁盘空间这样的东西,而cronjob会压缩/清理旧的。 IMO的重要事项是:

  • 如果完成日志的磁盘空间,它不会崩溃(因为在大多数情况下这可能是愚蠢的,但是YMMV)
  • 如果用户确实需要它,请添加可选的反垃圾邮件功能:请记住,大多数时候用户只会禁用日志记录:)