linux - 将内容添加到文件中间..直到最后才阅读

标签 linux filesystems windows c

我在 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/

相关文章:

mysql - Bash 脚本不运行 MySQL 命令

linux - 设置变量时找不到 bash 命令

php - 在服务器上的文件中查找字符串并替换它

c - 如何在 Linux 上通过 inode 访问文件

windows - Azure 角色在终止前是否需要清理本地资源?

linux - vim 远程编辑 : ftpplugin or remote vim over ssh

c++ - 在 C++ 中创建文件夹

xcode - Xcode 移动到垃圾箱和删除引用有什么区别?

python - PermissionError:[WinError 5]访问被拒绝:[4776]运行docker-compose up时无法执行脚本docker-compose

c# - 始终显示热键