2

有没有一种方法可以快速确定从文件中读取的(4KB-16MB)块是否全为零?

您可以遍历块,检查每个字节。有明显的优化,但仍然是 O(N)。

我的用例是稀疏文件。对于部分解决方案,我会非常高兴,这样如果我刚刚读取的块没有任何磁盘存储支持(即它是一个孔),则返回 true。

有什么提示吗?

4

2 回答 2

3

这取决于操作系统,有时还取决于文件系统。自 2.6.28 以来的 Linux 已经实现了FIEMAP ioctl(), Solaris 上SEEK_HOLE的ZFSSEEK_DATAlseek().

于 2011-10-19T09:01:59.227 回答
2

我的第一个想法是,“rsync 是如何做到的?”

事实证明,rsync 只是检查数据中的零块,并将它们写入稀疏文件。fileio.c如果你想要血淋淋的细节,请参阅rsync 源代码。

于 2011-10-19T08:43:25.967 回答