Wie kann ich die hochauflösende Zeit für eine symbolische Verbindung in Perl bekommen?

8

Ich möchte die Ausgabe von ls --full-time von einem Perl-Skript reproduzieren, um den Overhead des Aufrufs von ls mehrere tausend Male zu vermeiden. Ich hatte gehofft, die Statistik -Funktion zu verwenden und alle Informationen von dort zu erfassen. Der Zeitstempel in der ls-Ausgabe verwendet jedoch die hochaufgelöste Uhr, so dass sie auch die Anzahl der Nanosekunden enthält (laut den GNU-Dokumenten bedeutet dies, dass - Vollzeit entspricht --format=long --time-style=full-iso und die Voll-ISO Zeitstil umfasst die Nanosekunden).

Ich stieß auf das Modul Time :: HiRes , das die Standard-Statistikfunktion mit einer Funktion überschreibt, die zur Zeit zurückkehrt / mtime / ctime als Gleitkommazahlen, aber es gibt keine Überschreibung für lstat . Dies ist ein Problem, da der Aufruf von stat auf einem Symlink Informationen für die verknüpfte Datei zurückgibt, nicht für den Link selbst.

Also meine Frage ist das - wo finde ich eine Version von lstat, die atime / mtime / ctime auf die gleiche Weise wie Time :: HiRes :: stat zurückgibt? Ist das nicht der Fall, gibt es eine andere Möglichkeit, die Modtime für einen Symlink in hoher Auflösung zu erhalten (außer dem Aufruf von ls).

    
kbro 18.03.2010, 14:16
quelle

4 Antworten

4

Wenn Sie bereit sind, Inline :: C zu verwenden, wird dies mit dem letzten Linux funktionieren

%Vor%     
niry 18.03.2010 23:21
quelle
3

Am besten wäre es, wenn lstat zu Time :: HiRes hinzugefügt wird. Tatsächlich könnten Sie es wahrscheinlich selbst tun. Ich würde wetten, dass Sie nur die Funktion kopieren müssen, die

startet %Vor%

in HiRes.xs , ändern stat(...) in lstat(...) & amp; OP_STAT bis OP_LSTAT , addiere lstat zu @EXPORT_OK in HiRes.pm und kompiliere neu. Dann reiche einen Patch ein, damit andere davon profitieren können.

    
cjm 18.03.2010 21:22
quelle
2

Die folgenden Änderungen funktionieren. Dies beinhaltet im Wesentlichen Änderungen sowohl am HiRes.pm-Modul als auch an der xs-Datei.

In HiRes.pm

%Vor%

Außerdem wurde lstat zur @EXPORT_OK-Liste hinzugefügt.

In HiRes.xs

%Vor%     
Bharath K 11.01.2012 11:49
quelle
1

Für den Datensatz wurde lstat zu Time-HiRes Version 1.9726 im August 2013 hinzugefügt.

Siehe Ссылка für Details.

Es ist jedoch immer noch 1.9725 , das in der letzten stabilen Version von perl vom 31.01.2014 (5.18.2) enthalten ist. Es wurde jedoch in der Entwicklungsversion in 5.19.3 auf 1.9726 gestoßen.

Beachten Sie, dass (unabhängig von perl 5.19.8), unabhängig davon, ob Time::HiRes lstat verwendet ist oder nicht, perl's -M / -A / -C machen immer noch keine Granularität in Sekundenbruchteilen (Dateien mit der Zeit in der gleichen Sekunde werden als gleich alt angezeigt), Sie können also immer noch nicht sort {-M $a <=> -M $b} @files verwenden, um Dateien nach Modifikationszeit zu sortieren.

    
Stephane Chazelas 31.01.2014 12:31
quelle

Tags und Links