Nach meinem Verständnis gibt es für die Bearbeitung von Dateien unter Linux nur den sys_write-Syscall, der den Dateiinhalt überschreibt (oder ihn erweitert, wenn am Ende).
Warum gibt es unter Linux keine Systemaufrufe zum Einfügen oder Löschen von Inhalten in Dateien?
Da bei allen aktuellen Dateisystemen die Datei nicht in einem fortlaufenden Speicherblock gespeichert werden muss, sollte eine effiziente Implementierung möglich sein. (Die Dateien würden fragmentiert.)
Mit Dateisystemfunktionen wie "Beim Schreiben kopieren" oder "Transparente Dateikomprimierung" scheint die derzeitige Art des Einfügens von Inhalten sehr ineffizient zu sein.
files
file-copy
system-calls
dercolamann
quelle
quelle
Antworten:
Auf neueren Linux-Systemen ist dies tatsächlich möglich, jedoch mit Block (meistens 4096), nicht mit Byte- Granularität und nur auf einigen Dateisystemen (ext4 und xfs).
Zitat aus der
fallocate(2)
Manpage:quelle
Bei Dateisystemen müssen Dateien möglicherweise nicht in einem kontinuierlichen Bereich gespeichert werden (und das wäre in der Tat sehr unflexibel), aber normalerweise werden Dateien in Blöcken fester Größe (oder Sequenzen zusammenhängender Blöcke) gespeichert. Auf diese Weise wird die Implementierung vereinfacht, und die Blöcke sind normalerweise ein Vielfaches der Blockgröße des zugrunde liegenden Geräts.
Das Implementieren von Einfügungen von Blöcken mit beliebiger Länge würde das Format und die Implementierung des Dateisystems ziemlich komplexer machen oder das Verschieben potenziell großer Datenmengen erfordern. Beides ist nicht wirklich gut, und komplexe Datenstrukturen können im Benutzerbereich über der Dateisystem-API erstellt werden.
quelle