【发布时间】:2012-10-20 21:58:24
【问题描述】:
可能重复:
C write in the middle of a binary file without overwriting any existing content
我正在编写一个偶尔需要在二进制文件开头插入 1-64k 数据的程序。 POSIX API / Linux ABI 没有insert(fd,buf,len) 函数调用。最有效的方法是什么?
【问题讨论】:
可能重复:
C write in the middle of a binary file without overwriting any existing content
我正在编写一个偶尔需要在二进制文件开头插入 1-64k 数据的程序。 POSIX API / Linux ABI 没有insert(fd,buf,len) 函数调用。最有效的方法是什么?
【问题讨论】:
您的选择是:
(2) 的优点是它不会破坏符号链接或指向原始文件的多个链接。缺点(正如Keith Thompson 所指出的)是,如果它被中断,您就会丢失原始文件。
(1) 的缺点是,如果您需要保留链接数量并通过符号链接工作,则必须将新文件复制回旧文件,因此需要进行更多复制。优点是复制比较简单,原文件直到结束才被破坏。
选项 (2) 的代码还有另一个问题 — Write in the middle of a binary file without overwriting any existing content。在(二进制)文件的开头插入只是在文件中间插入的特定(甚至不是特殊)情况。
【讨论】:
mmap() 可能有一些技巧可供您使用(其中一个问题是如何使mmap() 比文件中的当前空间更多)。最终,这将类似于代码所做的,但它可能能够更有效地完成它,如果仅仅是因为更少的系统调用。如果要插入的数量是页面大小的倍数,系统可能会加快速度,但可能意识不够。