ubuntuusers.de

opendir(), readdir() & _DIRENT_HAVE_D_TYPE

Status: Ungelöst | Ubuntu-Version: Ubuntu MATE 24.04 (Noble Numbat)
Antworten |

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6463

Wohnort: Hamburg

Ich habe mit diesen Funktionen einige Probleme. Es geht eigentlich darum, ob man das Vorhandensein von "_DIRENT_HAVE_D_TYPE" bei Linux inzwischen als allgemein vorhanden annehmen darf. Die Dokumentationen sind da etwas unscharf.

Die Doku zu readdir() sagt zwar zu d_type:

              Currently, only some filesystems (among them: Btrfs, ext2,
              ext3, and ext4) have full support for returning the file
              type in d_type.  All applications must properly handle a
              return of DT_UNKNOWN.

Ich erinnere mich aber, dass es damals auf einem uralt PC (Ubuntu 8.04) mit Reiserfs auch schon funktioniert hatte. Allerdings hatte ich später, auf einem Netzwerklaufwerk oder einer externen USB-Platte (weiß ich jetzt nicht mehr genau) Probleme damit. Es gab als Ergebniskode "DT_UNKNOWN". Diesen Zustand kann ich heute leider nicht mehr herstellen. Ich vermute, das liegt daran, dass heutzutage übergestülpte virtuelle Dateisysteme da (helfend?) eingreifen.

Wenn ich jetzt das Vorhandensein von "_DIRENT_HAVE_D_TYPE" immer noch testen muss, verkompliziert das den Programmkode erheblich, da ich ja in jedem Fall den DT_UNKNOWN Fall immer behandeln muss. Eines der Probleme dabei ist, dass die Rückfallfunktion stat() einen absoluten Dateipfad benötigt.

Ich mag keine Quelltexte, wo große unübersichtliche, Bereiche von "#ifdef's" abhängig sind. Kann ich das irgendwie vermeiden?

Antworten |