Esiste un metodo per determinare rapidamente se un pezzo di leggere da un file (sparso) è tutti gli zeri?

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

  •  26-10-2019
  •  | 
  •  

Domanda

Esiste un metodo per determinare rapidamente se una (4KB-16MB) pezzo lette da un file è tutti zeri?

È possibile iterare il pezzo, controllando ogni byte. Ci sono evidenti ottimizzazioni, ma rimane O (N).

Il mio caso d'uso è per i file sparsi. Sarei perfettamente felice per una soluzione parziale, in modo tale che se il pezzo che ho appena letto non è sostenuta da alcun storage su disco (cioè si tratta di un buco) per poi tornare vero.

Eventuali suggerimenti?

È stato utile?

Soluzione

Questo dipende dal sistema operativo e, talvolta, il filesystem. Linux dal 2.6.28 ha attuato la FIEMAP ioctl() , e ZFS su strumenti di Solaris SEEK_HOLE e SEEK_DATA in lseek().

Altri suggerimenti

Il mio primo pensiero è stato: "Come fa rsync farlo?"

Si scopre che rsync semplicemente controlla i dati per blocchi di zeri, e li scrive come file sparsi. Vedere fileio.c nel codice sorgente rsync se si desidera che i dettagli cruenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top