Verfügt Linux über Systemaufrufe, um auf alle Funktionen der unterstützten Dateisysteme zuzugreifen?

12

Linux unterstützt viele Dateisysteme (z. B. ext3, NTFS, FAT32 usw.).

Das folgende Diagramm zeigt, wie Linux einem Prozess den Zugriff auf Dateien ermöglicht:

Bildbeschreibung hier eingeben

Angenommen, ein Prozess, der den read()Systemaufruf zum Lesen einer Datei aufgerufen hat , führt dazu, dass auf die VFS-Ebene zugegriffen wird und die VFS-Ebene auf der Grundlage des Dateisystems der Partition, auf die die Datei zugreift, entscheidet, auf welchen Dateisystemtreiber zugegriffen wird gelesen werden residiert auf.

Linux bietet viele Systemaufrufe Zugriff auf Dateien (zum Beispiel: read(), write(), rename(), etc.).

Jetzt read()und write()und rename()arbeiten Sie an allen von Linux unterstützten Dateisystemen.

Es gibt jedoch bestimmte Funktionen, die nur auf einigen Dateisystemen vorhanden sind, auf anderen jedoch nicht. Beispiel: In einem NTFS-Dateisystem können Sie das Archivbit für eine Datei festlegen , während dies in einem ext3-Dateisystem nicht möglich ist.

Meine Frage ist nun: Hat Linux Systemaufrufe, um auf alle Funktionen der unterstützten Dateisysteme zuzugreifen? Beispiel: Verfügt Linux über einen Systemaufruf zum Setzen des Archiv- Bits für eine Datei in einem NTFS-Dateisystem?

user341642
quelle

Antworten:

10

Hat Linux einen Systemaufruf, um das Archivbit für eine Datei in einem NTFS-Dateisystem zu setzen?

In diesem speziellen Fall ntfs-3gexportiert der Treiber die Dateiattribute über erweiterte Attribute . Siehe Kann ich das "Archiv" -Bit für eine Datei unter NTFS unter Linux setzen?

Das (V) FAT-Dateisystem weist ähnliche Dateiattribute auf, verwendet jedoch eine ioctl()Funktion, um darauf zuzugreifen, siehe ioctl_fat(2). ( ioctl()Dies ist eine Art Mehrzweck-Systemaufruf, der für alle gerätespezifischen Dinge verwendet wird, die keinen echten Systemaufruf rechtfertigen.)

Meine Frage ist nun: Hat Linux Systemaufrufe, um auf alle Funktionen der unterstützten Dateisysteme zuzugreifen?

Es ist schwer zu beantworten , sicher , aber zumindest ein Beispiel für das Gegenteil gewesen. ext4 unterstützt intern einen "Geburtszeit" -Zeitstempel für Dateien (wie eine echte Erstellungszeit, im Gegensatz zu ctimeÄnderungen bei Inode-Änderungen). Obwohl ext4 das "Standard" -Dateisystem ist, gab es lange Zeit keinen Systemaufruf, um auf die Geburtszeit zuzugreifen.

Es sollte jetzt unterstützt werden, mit dem statx()Systemaufruf, der in Linux 4.11 im April 2017 hinzugefügt wurde .

Verbunden:

ilkkachu
quelle
3
ntfs! = fett. Zumindest die Kernel-Version von ntfs hat KEINE Möglichkeit, das Archiv-Flag zu setzen oder abzurufen, obwohl seine Header es definieren. Nur das auf Sicherungen basierende ntfs-3g scheint dies zu unterstützen (über erweiterte Attribute, keine speziellen Ioctls).
Onkel Billy
Dies hängt nicht direkt mit der Frage zusammen, aber als Ergänzung zu Ihrer Erwähnung von statxwird es jetzt in der C-Bibliothek und in der neuesten Version von coreutils unterstützt, die vor einigen Tagen veröffentlicht wurde.
Stephen Kitt
@UncleBilly, oh, anscheinend kann ich nicht lesen, dachte aber automatisch an (v) Fett. Vielen Dank, dass Sie das bemerkt haben. Ich werde sehen, ob ich eine passendere Referenz finden kann.
Ilkkachu