1

可能重复:
C 在二进制文件的中间写入而不覆盖任何现有内容

我正在编写一个偶尔需要在二进制文件开头插入 1-64k 数据的程序。POSIX API / Linux ABI 没有insert(fd,buf,len)函数调用。最有效的方法是什么?

4

1 回答 1

4

您的选择是:

  1. 创建一个新文件,写入新数据并将旧数据复制到新文件,然后用新文件替换旧文件(的内容)。
  2. 从文件末尾读取一个块,将块写入其新位置,重复,向后遍历文件。

(2) 的优点是它不会破坏符号链接或指向原始文件的多个链接。缺点(正如Keith Thompson所指出的)是,如果它被中断,您就会丢失原始文件。

(1) 的缺点是,如果您需要保留链接数量并通过符号链接工作,则必须将新文件复制回旧文件,因此需要进行更多复制。优点是复制比较简单,原文件直到最后都不会被破坏。

选项 (2) 的代码还有另一个问题 —写入二进制文件的中间而不覆盖任何现有内容。在(二进制)文件的开头插入只是在文件中间插入的特定(甚至不是特殊)情况。

于 2012-10-20T22:06:13.353 回答