从文件c的开头删除内容

时间:2018-12-10 14:43:29

标签: c posix

我正在为服务器进程实现附加的日志文件。它将一些操作写入日志,然后在各个点写入“检查点”记录。

我目前在文件的追加模式下打开了一个FILE指针,用于实际写入文件。

我想做的是,在各个点上,从磁盘记录中“转储”日志的最前面,直到指定检查点为止。我可以找到需要修改的相关字节偏移量。

我的问题是:有没有一种类似于truncate的优美方法,但是对于文件的开头呢?我可以选择将要保留的内容写入一个临时文件中,然后交换它们,但是如果有一个简单的操作不一定涉及重新扫描并写入一个单独文件的过程,我很乐意要知道。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

  

我的问题是:是否有一种类似于截断的优美方法,但对于文件的开头呢?

否。

您必须将要保留在文件中的数据原子复制到文件的开头,然后将其截断为新长度。

简而言之,这无法自动完成,使您容易遭受数据损坏或丢失的影响。

这甚至还没有涉及到附加到文件的进程是否都能够在打开文件时妥善处理文件发生的情况。根据打开文件(see the various oflag values in the POSIX open() documentation)的实际细节,即使您可以原子操作,写入文件的进程也可能无法处理该操作。

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