Jef*_*and 26
只有在晦涩的理论中.由于磁盘存储始终基于块和文件系统因此将内容存储在块边界上,因此如果第一个文件在块边界上完美结束,则只能将一个文件附加到另一个文件而不进行重写.有一些罕见的文件系统配置使用尾部打包,但这只有在第一个文件已经使用前一个文件的尾部块时才有用.
除非出现完美的情况或者您的文件系统能够在文件中间标记部分块(我从未听说过这个),否则这将无效.只是为了解决边缘问题,除了更改内核interace以进行此类调用之外,还没有办法(re:链接到特定的inode)
是的,我们可以使用append(>>)操作.
cat file2 >> file1
Run Code Online (Sandbox Code Playgroud)
这仍将导致使用file2两次消耗的所有空间,直到我们可以删除它.
不.除非有人带回我不知道的东西,否则你在那里基本上没有运气了.可以截断一个文件,忘记它的结尾是存在的,但除非我们直接修改inode并且必须将内核接口改为文件系统,否则没有办法忘记启动的存在,因为那是绝对不是一个POSIX操作.
再也没有.由于我们无法关闭文件的开头,因此我们必须重写从感兴趣点到文件末尾的所有内容.对于IO而言,这将是非常昂贵的,并且只有在我们已经读取了一半文件之后才有用.
也许!稀疏文件允许我们存储一长串零而不占用太多空间.如果我们file2从最后开始读取大块,我们可以将这些块写到最后file1.file1会立即查看(和读取),就好像它们两者的大小相同,但是在我们完成之前它会被破坏,因为我们没有写的所有东西都会充满零.
解释所有这些本身就是另一个答案,但是如果你可以做一个备用分配,你将只能使用你的块读取大小+一点额外的磁盘空间来执行这个操作.有关文件中间稀疏块的参考,请参阅http://lwn.net/Articles/357767/或进行涉及术语的搜索SEEK_HOLE.
为什么这"可能"而不是"是"?两部分:你必须编写自己的工具(至少我们在正确的网站上),稀疏文件不受文件系统和其他进程的普遍尊重.幸运的是,您可能不必担心与您的文件有关的其他进程,但您将不得不担心设置正确的标志并确保您的文件系统是合适的.最后,你仍然会阅读和重写长度file2,这不是你想要的.这种方法确实意味着您可以只使用少量磁盘空间,而不是至少使用2*file2大量空间.
| 归档时间: |
|
| 查看次数: |
10663 次 |
| 最近记录: |