我正在研究用C编写的聊天程序的日志记录机制,我不确定与写入文件有关的潜在危险。
我担心垃圾邮件,以及我如何处理每秒可能有几十甚至几百个fopen
/ fclose
个电话,如果这甚至是一个担心的话。现在我填充缓冲区然后在缓冲区已满后将缓冲区的内容写入文件,但即使这样也可能无法缓解大量垃圾邮件攻击,除非缓冲区过大。
我是否过于偏执或这是一个需要照顾的问题?
答案 0 :(得分:2)
stdio.h
I / O函数默认使用缓冲。虽然您可以自由使用自己的缓冲区,但请注意,您可能会过度复杂化日志记录。
如果您计划每秒多次打开和关闭文件,那么保持文件描述符打开更有意义。保持文件打开不会阻止您在程序中写入文件,也不会阻止您从其他程序中读取日志文件(例如,在后台运行程序)。
唯一需要注意的是,使用缓冲日志记录系统时,在程序终止之前可能无法刷新缓冲区。在中,您的缓冲区(或由stdio维护的缓冲区)可能只是部分填充,但崩溃导致缓冲区的内容永远不会被写入。这可能会阻止关键信息用于调试崩溃。
这意味着您应该弄清楚如何捕获可能的错误,并在终止之前flush输出缓冲区。
答案 1 :(得分:1)
首先,你不需要每次fopen / fclose,你可以让文件保持打开状态(如果你担心如果程序崩溃的话,没有写入日志文件的东西,这只适用于 debug 日志,而不是用户日志。
那说,看看其他人做了什么!
通常,deamon会将所有内容写入其日志文件,而不必担心像磁盘空间这样的东西,而cronjob会压缩/清理旧的。 IMO的重要事项是: