c语言 - 使用 Linux ABI (POSIX),在文件开头插入字节的最有效方法是什么?



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

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

您的选择是:

  1. 创建一个新文件,写新数据,然后将旧数据复制到新文件,然后用新文件替换旧文件的内容。
  2. 从文件的末尾读取一个块,将块写入其新位置,反复地通过文件向后运行。

(2)的优点是它不会打破符号链接或多个链接到原始文件。缺点(如基思·汤普森(Keith Thompson)所述)是,如果它被中断,您已经丢失了原始文件。

(1)的缺点是,如果您需要保留数量的链接并通过符号链接工作,则必须通过旧文件复制新文件,因此还有更多复制。优势是复制更简单,直到末尾才破坏原始文件。

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

最新更新