?
struct-padding schrieb:
wie machen es denn anwendungen, z.b. der linuxkernel? die dateisysteme dort werden ja auch durch structs implementiert. wird da etwas mit memcpy eingelsen oder direkt gecastet? weiß das jemand?
Weder noch. Das On-Disk-Format eines Linux-Dateisystems spezifiert für jedes Feld die genaue Größe, die zu erwartende Byteorder und einen Offset zum Beginn der Struktur.
Ein JBD2-Journal-Header (u.a. von Ext3 und Ext4 verwendet) ist etwa so definiert:
Offset Typ Name
0 be32 h_magic
4 be32 h_blocktype
8 be32 h_sequence
Das heißt, dass jedes der drei Felder 32 Bit groß ist und in Big-Endian-Byteorder vorliegen muss. Außerdem schließen die Felder direkt aneinander an, es gibt kein Padding.
An diese Spezifikation muss sich jeder halten. Tut er es nicht, ist das was er schreibt einfach kein gültiger JBD2-Blockheader mehr.
Außerhalb des Journals nutzt Ext4 auch Strukturen mit LE-Byteorder. Wie bei Binärformaten üblich, muss man hier einfach genau darauf achten, was vereinbart wurde. Daher kann ich Sepp nur zustimmen: sofern es irgendwie möglich ist, benutze ein textuelles Format. Da ersparst du dir sehr viel Fummelei und bist trotzdem portabel.