我在 unix.stackexchange 上阅读了各种问题/答案,了解如何在不需要创建临时文件的情况下向文件添加行或从文件中删除行。
https://unix.stackexchange.com/questions/11067/is-there-a-way-to-modify-a-file-in-place?lq=1
看起来所有这些答案都需要一个至少读取到文件末尾,如果输入是一个大文件,这可能会很耗时。有没有解决的办法?我希望文件系统像链表一样实现……所以应该有一种方法可以到达所需的“行”,然后只需添加内容(链表中的节点)。我该怎么做?
我这样想对吗?或者我错过了什么吗?
Ps:我需要在“C”中完成此操作,并且不能使用任何 shell 命令。
最佳答案
从 Linux 4.1 开始,fallocate(2)支持 FALLOC_FL_INSERT_RANGE
标志,它允许在文件中间插入一个给定长度的孔,而无需重写以下数据。然而,它有很大的局限性:洞必须插入到文件系统 block 边界,插入的洞的大小必须是文件系统 block 大小的倍数。此外,在 4.1 中,此功能仅受 XFS 文件系统支持,在 4.2 中添加了 Ext4 支持。
对于所有其他情况,仍然需要重写文件的其余部分,如其他答案中所示。
关于linux - 将内容添加到文件中间..直到最后才阅读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17203138/