Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?
-
Unter der WinAPI gibt es die Funktion GetFileTime, welche mir die CreationTime, LastAccessTime und die LastWriteTime zurückliefert.
In std::filesystem habe ich aber nur die Funktion std::filesystem::last_write_time gefunden.
Wie bestimme ich also in std::filesystem CreationTime und LastAccessTime? Oder ist dies nicht möglich?
-
@Quiche-Lorraine sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Oder ist dies nicht möglich?
Ja, soweit ich sehen kann gibt es keine Funktion dafür. Vermutlich weil "last access time" etwas ist was auf vielen Plattformen nicht existiert.
-
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Ja, soweit ich sehen kann gibt es keine Funktion dafür. Vermutlich weil "last access time" etwas ist was auf vielen Plattformen nicht existiert.
Würde ich so nicht sagen. Alle Filesysteme unter Windows haben das, nahezu alle unter Linux haben das (da ist MacOS mit dabei) und selbst das 31+ Jahre alte FFS vom Amiga hat das. Interessanterweise hat auch Boost keine Implementierung dafür, hätte ich so nicht erwartet. Es scheint wirklich ein reines C-lib Ding zu sein (stat/stat64, gibts auch unter Windows, fstat?).
-
@VLSI_Akiko Interessant. Sind
atime
Updates auf Linux üblicherweise per Default aktiv? Auf Windows nämlich soweit ich weiss nicht. Allerdings... nur weil die Updates per Default nicht gemacht werden, wäre das noch kein Grund Funktionen zum Abfragen des Timestamps wegzulassen.OK. Dann weiss ich nicht was der Grund ist.
-
@VLSI_Akiko sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Alle Filesysteme unter Windows haben das, nahezu alle unter Linux haben das (da ist MacOS mit dabei)
Verstehe nicht ganz was du damit meinst. MacOS ist ein BSD-derivat.
-
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
@VLSI_Akiko Interessant. Sind
atime
Updates auf Linux üblicherweise per Default aktiv?Also spätestens als root darfst du alles (außer es wurde durch den capabilties Kernel Mechanismus entzogen). Und ja, ist aktiv, sonst würden die Replikationsmechanismen für Backups und deren Zurückspielen nicht tun. Aber vielleicht ist das auch der Grund, Windows räumt den normalen Benutzern dieses Recht nicht ein und "dummen Fragen" vorzubeugen (warum denn nicht) wurde es nicht mit in dem C++ Standard implementiert.
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
@VLSI_Akiko sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Alle Filesysteme unter Windows haben das, nahezu alle unter Linux haben das (da ist MacOS mit dabei)
Verstehe nicht ganz was du damit meinst. MacOS ist ein BSD-derivat.Linux implementiert nahezu alle existierenden Filesysteme (inklusive der Clusterfilesystem) und Verwaltungsblocklayouts (MBR, GUID, RigiDiskBlock, Unix labels ...). Wollte MacOS nicht noch extra mit auflisten, wobei ich mir jetzt nicht so sicher bin, ob auch das HAMMER/HAMMER2 von BSD im Kernel ist. Naja, wird es aber 100% als externes Kernelmodul geben.
-
@VLSI_Akiko sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
@VLSI_Akiko Interessant. Sind
atime
Updates auf Linux üblicherweise per Default aktiv?Also spätestens als root darfst du alles (außer es wurde durch den capabilties Kernel Mechanismus entzogen). Und ja, ist aktiv, sonst würden die Replikationsmechanismen für Backups und deren Zurückspielen nicht tun.
Was hat die "last acces time" mit Replikationsmechanismen/Backups zu tun? Die verzeichnet wann ein File das letzte mal geöffnet/gelesen wurde.
Aber vielleicht ist das auch der Grund, Windows räumt den normalen Benutzern dieses Recht nicht ein
Welches Recht? Das Updaten (Schreiben) der "last acces" Timestamps ist auf Windows seit Version weiss-nimmer-genau-aber-sehr-lange-her aus Performancegründen deaktiviert - weil die eh kaum jemanden interessieren.
Lesen kann die "last acces time" auf Windows auch ein nicht-priviligierter Benutzer. Und das auch wenn die Updates deaktiviert sind. Man bekommt dann halt effektiv die "modified" Zeit.
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
@VLSI_Akiko sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Alle Filesysteme unter Windows haben das, nahezu alle unter Linux haben das (da ist MacOS mit dabei)
Verstehe nicht ganz was du damit meinst. MacOS ist ein BSD-derivat.Linux implementiert nahezu alle existierenden Filesysteme (inklusive der Clusterfilesystem) und Verwaltungsblocklayouts (MBR, GUID, RigiDiskBlock, Unix labels ...). Wollte MacOS nicht noch extra mit auflisten, wobei ich mir jetzt nicht so sicher bin, ob auch das HAMMER/HAMMER2 von BSD im Kernel ist. Naja, wird es aber 100% als externes Kernelmodul geben.
Ah, verstehe. Du hast gemeint "da sind die von MacOS mit dabei".
RigiDiskBlock
Rigid Disk Block, falls du das von AmigaOS meinst
-
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Was hat die "last acces time" mit Replikationsmechanismen/Backups zu tun? Die verzeichnet wann ein File das letzte mal geöffnet/gelesen wurde.
Wenn du ein Backup zurückspielst, willst du auch alle Dateiattribute wieder so haben, wie sie mal waren. Beim Erstellen des Backups veränderst du das ja. Echtes Replizieren verändert die Dateizeiten nicht, aber vielleicht gibt es das so in der Windows Welt ja nicht. Soweit ich weiß kann das auch tar, was der ursprüngliche Backupmechanismus (in Verbindung mit Bändern) war.
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Welches Recht? Das Updaten (Schreiben) der "last acces" Timestamps ist auf Windows seit Version weiss-nimmer-genau-aber-sehr-lange-her aus Performancegründen deaktiviert - weil die eh kaum jemanden interessieren.
Das Recht die access time beliebig zu manipulieren. Ja, in den meisten Linux Distros ist es auch abgeschaltet (nur ne default mount option), weil das dauernde Update der inodes performance-technisch übel ist und den Datenträger auch nicht so gut tut. Aber auf kritischer Infrastruktur mit Filesystem-Überwachung (capabilities, SeLinux, AppArmor) wird sowas genutzt um Manipulationen zu entdecken.
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Ah, verstehe. Du hast gemeint "da sind die von MacOS mit dabei".
Ja genau, das HPFS(+). Linux funktioniert in der Beziehung ja völlig anders als Windows. In Linux kannst du Treiber (und dazu gehören auch Filesysteme) ganz normal während der Laufzeit laden und wieder entladen. Du kannst dir auch schnell mal eben einen selbst schreiben und zum Testen laden. Vielleicht zeige ich das irgendwann auch mal. Hab ja diverse Treiber geschrieben, 2 davon sind auch im Mainline Linux.
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Rigid Disk Block, falls du das von AmigaOS meinst
Ja, lol, blöder Typo. Das ermöglicht dir übrigens beliebige Filesysteme in den "Bootblock" unterzubringen und dann 2 Milliarden Partitionen anzulegen.
-
@hustbaer sagte in Gibt es in std::filesystem eine Funktion zu Bestimmung der LastAccessTime?:
Ja, soweit ich sehen kann gibt es keine Funktion dafür. Vermutlich weil "last access time" etwas ist was auf vielen Plattformen nicht existiert.
Schade, wäre auch zu schön gewesen.
Zum Hintergrund: Ich habe alten Code zur Behandlung von Dateipfaden (z.B. _splitpath) durch die std::filesystem Varianten ersetzt. Ich finde diese wesentlich schöner, da ich so keine C Arrays mehr brauche und meine OS Abhängigkeiten weniger werden.
-
@VLSI_Akiko
Ich glaube hier liegt ein Misverständnis vor. Was auf Windows per Default deaktiviert ist, ist das automatische Updaten der Access-Timestamps. Manuell kannst du die trotzdem immer schreiben. Der Backup-Software steht also nichts im Weg.Linux funktioniert in der Beziehung ja völlig anders als Windows. In Linux kannst du Treiber (und dazu gehören auch Filesysteme) ganz normal während der Laufzeit laden und wieder entladen. Du kannst dir auch schnell mal eben einen selbst schreiben und zum Testen laden.
Was Treiber angeht ist das auf Windows nicht anders. Windows will seine Treiber signiert haben, aber da geht's um Security, und man kann das zumindest so umstellen dass Windows Signaturen mit selbst signierten Zertifikaten akzeptiert. Was File-Systeme angeht: keine Ahnung ob man die dynamisch laden/entladen kann. Würde mich aber wundern wenn nicht.
-
@Quiche-Lorraine Naja, du kannst dir ja eigene Funktionen bauen und für die 2, 3 (mehr?) OSe die du benötigst implementieren. Wenn du dich beim API Design an
std::filesystem
orientierst, dann sollten sich die halbwegs "natürlich" einfügen.