删除文件 c 前面的内容

Remove contents from front of file c

我正在为服务器进程实现附加日志文件。它将一些操作写入日志,然后在不同的点写入一条 "checkpoint" 记录。

我目前有一个 FILE 在文件上以附加模式打开的指针,用于文件的实际写入。

我想做的是,在不同的点,"dump" 从磁盘记录到日志的前面,直到给定的检查点。我可以找到我需要修改的相关字节偏移量。

我的问题是:是否有一种类似于 truncate 的优雅方式来执行此操作,但用于文件的前面?我可以选择将我想要保留的内容写入临时文件然后交换它们,但如果有一个简单的操作不一定涉及重新扫描和写入单独文件的过程,我会喜欢想知道。

感谢您的帮助!

My question is: is there a graceful way to do this, similar to truncate, but for the front of the file?

没有

您必须以原子方式将要保留在文件中的数据复制到文件的前面,然后将其截断到新的长度。

简而言之,这无法自动完成,您可能会面临损坏或数据丢失的风险。

这甚至没有涉及附加到文件的进程是否都能够在文件打开时优雅地处理发生在文件上的事情。根据文件打开方式的实际细节 (see the various oflag values in the POSIX open() documentation),写入文件的进程可能会或可能不会处理该操作,即使您可以自动执行。

不要重新发明适当的日志记录系统。他们已经处理过这样的事情了。