Y at-il une méthode pour déterminer rapidement si un morceau lu à partir d'un fichier (rares) est tous les zéros?

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

  •  26-10-2019
  •  | 
  •  

Question

Y at-il une méthode pour déterminer rapidement si un morceau (4Ko-16MB) lu à partir d'un fichier est tous les zéros?

Vous pouvez itérer sur le morceau, en vérifiant chaque octet. Il y a Optimisations évidentes, mais il reste O (N).

Mon cas d'utilisation est pour les fichiers rares. Je serais parfaitement heureux d'une solution partielle, de telle sorte que si le morceau que je viens de lire n'est pas sauvegardé par un stockage sur disque (à savoir qu'il est un trou), puis retourne true.

Les conseils?

Était-ce utile?

La solution

This depends on the operating system and sometimes the filesystem. Linux since 2.6.28 has implemented the FIEMAP ioctl(), and ZFS on Solaris implements SEEK_HOLE and SEEK_DATA in lseek().

Autres conseils

My first thought was, "How does rsync do it?"

It turns out that rsync simply checks the data for blocks of zeroes, and writes them as sparse files. See fileio.c in the rsync source code if you want the gory details.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top