Nehmen wir an, dass die Absicht darin besteht, eine Datei mit einem großen Loch zu erstellen, auf das später geschrieben wird, auf einem Embedded-Gerät mit Linux. Wir öffnen die Datei, erhalten einen Dateideskriptor und rufen lseek
darauf an, um nach einer bestimmten, bekannten Position zu suchen. Wenn wir später in die gesuchte Position schreiben wollen, rufen wir write
darauf an.In Nulldatei schreiben in Linux
Beim ersten Schreibvorgang wird das Loch, das durch Suchen erzeugt wird, jedoch mit Null gefüllt, und wenn das Loch groß genug ist, kann dieser Vorgang einige Zeit dauern. In meiner Anwendung ist diese Null-Initialisierung nicht notwendig, da das Loch eine genaue Länge hat und ich es später mit meinen Daten füllen werde.
Gibt es eine Möglichkeit zu vermeiden, dass der erste write
Anruf nach seek
Zero-füllen Sie das Loch (auch wenn es die Änderung des Dateisystemtreibers umfasst)? Oder gibt es eine Möglichkeit, in eine Datei vor dem Anfang der Datei zu schreiben (an die Vorderseite der Datei anhängen)?
Sie haben Recht. In meinem Fall dauert das Ausführen von 'dd if =/dev/zero von =/mnt/mmc/was auch immer bs = 1k seek = 100000' ungefähr 10 Sekunden und die resultierende Dateigröße beträgt 97,7M.Dateisystem ist vfat, und leider kann ich das nicht ändern, da ich auf einer SD-Karte arbeite, die über mehrere Systeme lesbar sein soll. –
Ja, keines der FAT-Dateisysteme unterstützt irgendeine Art von dünnem Dateispeicher, den ich kenne. Es gibt wahrscheinlich keine Möglichkeit, genau das zu erhalten, wonach Sie fragen, aber vielleicht gibt es eine gute Lösung für das eigentliche Problem, das Sie zu lösen versuchen. –
@NebojsaMrmak: Werfen Sie einen Blick auf diese [andere Antwort] (http://stackoverflow.com/a/4396912/865874), HTH. – rodrigo