在输出文件中的两点之间移动

Sha*_*pie 1 c

我正在编写一个生成大型输出文件的C程序.为了提高可读性,我想在文件中的某些点收集某些类型的输出,而不是随机散布.

考虑如下文件:

log
log
(a)

output
output
output(b)
Run Code Online (Sandbox Code Playgroud)

假设程序当前正在写(b)行.在C中是否有一种特别优雅的方式来实现移动到点(a)的效果,添加线路输出然后在(b)恢复正常输出?

我知道我可以使用标准shell工具(如csplit)在指定点打破文件,将输出附加到前半部分,然后将其重新绑定在一起,从而实现此效果.但是,此应用程序必须是跨平台的,因此我不能指望有可用的shell.

任何建议都会有所帮助!

Ric*_*dle 6

在单个文件中执行您所描述的内容的唯一方法是保留前面"日志"条目所需的所有空间,我猜你不能这样做,因为你没有知道他们会变得多大.

您不能只是插入文件,向上移动插入点上方的内容以腾出空间.这不是通用文件系统支持的概念.您需要物理读取和重写所有"输出"部分,以便插入"日志"部分,随着文件的增长,这将需要越来越多的工作量.

你最好的选择是写两个单独的文件,然后在最后加入它们.

编辑以下Sharpie的评论:由于输出是程序的一组命令,这是否意味着你可以安全地假设它不会超过几MB的大,并且只是在将它写出来之前在内存中构建它一气呵成?