Welchen Datentypen benutzt das ext2-Filesystem?

2 Antworten

Die einfachen Datentypen "char", "int", "long", "float", "double" von C stammen noch aus der "Urzeit" der Computertechnik. Damals hatte so ein Computer höchstens 16 Bit. Da reichten die einzelne Wörter für die Datentypen völlig aus. Heutzutage haben Computer sehr unterschiedliche, hohe Bitzahlen, da müsste man sehr viele neue Wörter erfinden und auswendig lernen. Daher die Abkürzungen.

Außerdem definieren verschiedene Systeme Datentypen mit anderer Bitzahl. So benutzte DOS damals für viele Datentypen 16/32 Bits, moderne Betriebssysteme benutzen bei gleicher Typbezeichnung gleich 64 Bits.

Verwendet man einen Datentyp der mehr oder weniger Bits hat als der Prozessor, so muss die Variable ständig beschnitten oder durch Schrittweises Abarbeitend er Variablenteile mit vielen Befehlen sehr aufwändig bearbeitet werden was Speicherplatz und Zeit kostet. Daher braucht man also viele Datentypen wenn man effiziente Programme schreiben will.

Die Zahl ist natürlich die Bitzahl

"u" bedeutet ohne Vorzeichen (unsigned), andernfalls wird immer mit Vorzeichen verwendet.

und dann gibt es bei Fließkomma noch verschiedene Darstellungsformen die Auswirkungen darauf haben wie genau die Nachkommastellen sind und wie schnell man diese Variablen bearbeiten kann.

Woher ich das weiß:Berufserfahrung

Die eingebauten Datentypen der Sprachen C und C++ haben eine implementierungsabhängige Breite (und eine Implementierungsabhängige Endianess). Genau deswegen gibt es für Dateisysteme und andere Binär-Schnittstellen diese Typedefs, um die irgendwie portabel zu bekommen.

Auf Compilern für die x64-Architektur hat man immer Little Endian, und typischerweise ist der long 64 und der int 32 Bit breit.

Da ich gerade Versuche sozusagen eine Kopie von ext2 in C++ zu machen, im Sinne von Informationen aus einer Binären Datei zu lesen, davor Superblock, Inodes finden etc., brauche ich halt die Datentypen von __le32 etc. in "C++ Form"
Also wäre __le32 dann ein normaler int; __le16 = short; __le8 = byte.
Was ist dann mit __u32? unsinged int? und __le32 ist dann singed?

0
@corken

Warum liest du nicht in den Headern nach, wie die Typen definiert sind? Es gibt keine "C++-Form", auch in C++ musst du dich säuberlich darum kümmern, dass es exakt dieselben Typen sind.

1

Was möchtest Du wissen?