Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Unterstützung von DVS- und UFS-Dateien > 2 GB

&pagelevel(4)&pagelevel

Für die Bearbeitung von Dateisystemen, die Dateien > 2 Gigabyte (GB) enthalten, gibt es jeweils eine 64-Bit-Variante zu den nachfolgend aufgelisteten 32-Bit-C-Bibliotheksfunktionen. Die 64-Bit-Funktionen unterscheiden sich von den korrespondierenden 32-Bit-Funktionen durch das Suffix „64“ im Namen.

creat:

creat64

fgetpos:

fgetpos64

fopen:

fopen64

freopen:

freopen64

fseek:

fseek64

fseeko:

fseeko64

fsetpos:

fsetpos64

ftell:

ftell64

ftello:

ftello64

lseek:

lseek64

open:

open64

tmpfile:

tmpfile64

32-Bit- und 64-Bit-C/C++-Bibliotheksfunktionen

Zwischen der 32-Bit-Variante einer Funktion und der zugehörigen 64-Bit-Variante besteht kein funktionaler Unterschied. Abweichungen gibt es nur hinsichtlich der Datentypen für Parameter und Rückgabewerte, falls diese einen Offset oder eine Dateiposition spezifizieren, da für die Bearbeitung von Dateien > 2 GB auch Offset- und Rückgabewerte > 2 GB möglich sein müssen. So gibt es z.B. neben dem 32-Bit-Datentyp off_t den 64-Bit-Datentyp off64_t.

Die Übersetzungsumgebung stellt alle expliziten 64-Bit-Funktionen und -Typen zusätzlich zu den 32-Bit-Funktionen und -Typen zur Verfügung. Damit kann ein Programm, je nach Bedarf, beide Schnittstellen verwenden.

  • Die 64-Bit-Funktionen stehen nur in ANSI-Funktionalität zur Verfügung.
  • Da die meisten Namen der 64-Bit-Funktionen, auf 8 Zeichen gekürzt, CRTE-weit nicht mehr eindeutig sind, müssen Sourcen, die 64-Bit-Funktionen nutzen wollen, als LLMs generiert werden.

64-Bitschnittstelle nutzen

Für die Nutzung der 64-Bit-Schnittstelle stehen Ihnen zwei Alternativen zur Verfügung, zwischen denen Sie mithilfe des Defines _FILE_OFFSET_BITS wählen können:

  • 64-Bit-Funktionen transparent nutzen (_FILE_OFFSET_BITS 64)

  • 64-Bit-Funktionen explizit aufrufen (_FILE_OFFSET_BITS 32)

  • Das Define _FILE_OFFSET_BITS muss vor dem ersten Include auf eine Include-Datei gesetzt werden.
  • Die automatische Ersetzung durch die 64-Bit-Funktionen können Sie wahlweise via Namens-Defines oder Makro-Defines durchführen lassen.

64-Bit-Funktionen transparent nutzen (_FILE_OFFSET_BITS 64)

Das Define _FILE_OFFSET_BITS 64 ermöglicht die transparente Nutzung der 64-Bit-Schnittstelle, da die im Source-Code notierten 32-Bit-Funktionen bei der Übersetzung automatisch durch die zugehörigen 64-Bit-Varianten ersetzt werden (Ausnahme fseek und ftell, siehe unten). Außerdem stellt die Übersetzungsumgebung Datentypen in der passenden Größe bereit. So ist beispielsweise der Datentyp off_t als long long deklariert.

Mit dem Präprozessor-Define _MAP_NAME wählen Sie, ob die Abbildung auf die 64-Bit-Funktionen via Namens-Define-Technik oder via Makro-Define-Technik erfolgen soll.

Ein Programm kann sowohl Dateien > 2 GB als auch Dateien <= 2 GB bearbeiten. Die transparente Nutzung der 64-Bit-Funktionen ermöglicht es, dass Programme, die bisher ausschließlich für Dateien <= 2 GB vorgesehen waren, ohne Anpassungen im Source-Code auch Dateien > 2 GB bearbeiten können.

Bei den Funktionen fseek und ftell ist die automatische Ersetzung durch fseek64 bzw. ftell64 nicht möglich. Verwenden Sie deshalb bitte die Funktionen fseeko bzw. ftello, wenn Sie die automatische Ersetzung wünschen.

64-Bit-Funktionen explizit aufrufen

Wenn das Define _FILE_OFFSET_BITS 32 gesetzt ist oder wenn _FILE_OFFSET_BITS nicht definiert ist, müssen Sie für die Bearbeitung von Dateien > 2 GB die 64-Bit-Varianten der oben genannten Dateibearbeitungsfunktionen verwenden:

  • Falls Sie versuchen, eine Datei > 2 GB mit einer 32-Bit-Variante zu bearbeiten, führt dies zum Abbruch.

  • Mit den 64-Bit-Varianten können Sie jedoch auch Dateien <= 2 GB bearbeiten.

Die 64-Bit-Funktionen können explizit nur dann genutzt werden, wenn vorher das Define _LARGEFILE64_SOURCE 1 gesetzt wird (Prototyp-Generierung und weitere Defines).