(まばらな)ファイルからのチャンク読み取りがすべてゼロであるかどうかを迅速に判断する方法はありますか?

StackOverflow https://stackoverflow.com/questions/7818439

  •  26-10-2019
  •  | 
  •  

質問

ファイルから読み取られた(4kb-16Mb)チャンクがすべてゼロであるかどうかを迅速に判断する方法はありますか?

各バイトをチェックして、チャンクを反復させることができます。明らかな最適化がありますが、それはo(n)のままです。

私のユースケースは、スパースファイル用です。私は部分的なソリューションに完全に満足しているでしょう。そのため、私が読んだチャンクがディスクストレージ(つまり、穴)に裏打ちされていない場合、真実を返します。

ヒントはありますか?

役に立ちましたか?

解決

これは、オペレーティングシステムと場合によってはファイルシステムに依存します。 2.6.28が実装して以来のLinux FIEMAP ioctl(), 、およびsolarisのzfs SEEK_HOLESEEK_DATAlseek().

他のヒント

私の最初の考えは、「Rsyncはどのようにそれをしますか?」でした。

rsyncは単にゼロのブロックをデータにチェックし、それらをスパースファイルとして書き込むことがわかります。見る fileio.c Goryの詳細が必要な場合は、RSYNCソースコードで。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top