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

标签 c linux posix

<分区>

Possible Duplicate:
C write in the middle of a binary file without overwriting any existing content

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

最佳答案

您的选择是:

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

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

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

选项 (2) 的代码还有另一个问题 — Write in the middle of a binary file without overwriting any existing content .在(二进制)文件的开头插入只是在文件中间插入的特定(甚至不是特殊)情况。

关于c - 使用 Linux ABI (POSIX),在文件开头插入字节的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993082/

相关文章:

c - 事件队列清理

linux - 如何在linux中从具有两个范围的url批量下载文件

c - 在 fork 和 exec 之后在父子之间共享一个文件描述符

在堆中分配内存以保存指向字符的指针数组时,代码崩溃

c - 定义 C 中标点符号的替代品

linux - 如何在不同的 shellscsh/tcsh shell 上执行 sh shell 脚本?

c - 使用 execlp() 并遇到与指针相关的警告

R如何将时间戳转换为同一列中的多个时区

c - 使用 cgo 构建共享对象时导出变量

linux - 无法连接到tomcat服务器