2010-12-04 9 views
1

Ich muss mindestens testen, ob ein Byte-Bereich in einer Datei wirklich existiert oder ungültig ist.Betriebssystem-API für den Zugriff auf Sparse-Dateien?

Es muss auf den wichtigsten Betriebssystemen arbeiten: Unix (Linux/MacOSX/FreeBSD) und Windows.

Ich denke, es gibt immer noch keine Möglichkeit, Löcher in Dateien zu schießen oder gibt es einige Dateisystem-spezifische APIs und Vorschläge? Dies wäre auch für Log-Dateien so großartig.

Antwort

2

Unter Windows können Sie FSCTL_GET_RETRIEVAL_POINTERS verwenden, um die Zuordnung zwischen Dateiclustern und Datenträgern zu ermitteln.

Die entsprechende Linux (und wahrscheinlich auch einige andere posixes) IOCTL ist FIBMAP

+0

Hier ist ein Blogbeitrag über FIBMAP: http://smackerelofopinion.blogspot.com/2009/06/fibmap-ioctl-file-system-block-number.html – dmeister

+0

dauerte 5 Jahre für Unix (oder sagen wir 45 Jahre ?), um eine API dafür hinzuzufügen. Es heißt jetzt "Fallocate" und für fast alle Dateisysteme in Linux-Kernel 3.16. Wow und Leute beschweren sich über Windows. – Lothar

0

ich keine tragbare Art und Weise kennen, sparsity zu testen. Um eine Datei mit Löchern zu erstellen, müssen Sie seek() über die Löcher von Nullen schreiben anstatt sie zu schreiben. Dies funktioniert natürlich nur, wenn neue Dateien erstellt oder alte Dateien erweitert werden. Die Verwendung von seek() auf bereits vorhandenen Nullen wird nichts tun.

Verwandte Themen