2009-03-16 4 views

Antwort

7

Ich denke, Sie wollen utime(2). Das sollte genug sein:

utime(filename, NULL); 

Die docs sagen:

int utime(const char *filename, const struct utimbuf *times); 

[...]

Die utime() Systemaufruf die Zugriffs- und Änderungszeiten der inode ändert spezifiziert durch filename zu den actime und modtime Feldern der Zeiten beziehungsweise.

Wenn die Zeiten NULL sind, dann sind die Zugriffs- und Änderungszeitpunkte der Datei auf die aktuelle Zeit eingestellt.

1

Ich denke, Sie müssen sich den Systemaufruf utime()/utimes() ansehen. Nicht an meinem normalen Computer, also kann ich nicht die Details nachschlagen, fürchte ich.

10

utimes() ist wahrscheinlich, wie es geht. utime() ist veraltet.

Dinge wie diese sind trivial mit Tools wie strace zu bestimmen.

strace touch -t 01010911 xxx 
. 
. 
open("xxx", O_WRONLY|O_NONBLOCK|O_CREAT|O_NOCTTY|O_LARGEFILE, 0666) = 0 
utimes("/proc/self/fd/0", {1230829860, 0}) = 0 
+0

Ich glaube, strace ist Linux-spezifisch und das OP hat nicht erwähnt, welche UNIX er verwendet hat (Solaris, FreeBSD, etc, haben ähnliche Befehle, aber nicht strace). – bortzmeyer

+0

Seltsam, markiert POSIX utimes() als Vermächtnis, obwohl es mehr Funktionalität als utime() – Chris

+0

@Chris nicht mehr bietet. Laut Ausgabe 7 "Die LEGACY-Markierung wird entfernt.". Quelle: http://pubs.opengroup.org/onlinepubs/9699919799/functions/futimens.html – Alexandros

1

Die alte utime() und utimes() OK sind für viele Anwendungsfälle, aber atime & mtime mit Nanosekunde Auflösung, die Sie auf modernen Systemen aktualisieren müssen, verwenden Sie:

utimensat(0, path, NULL, 0); 

Dies ist sehr nützlich in Kombination mit neueren stat(), die ein struct timespecst_mtim Feld in struct stat mit Nanosekunden-Auflösung zurückgibt.

+0

Diese Antwort ist fast korrekt, aber anstelle von 0 als erstes Argument sollte man AT_FDCWD verwenden. Das dritte Argument ist ein Array von 2 Timespec-Strukturen. – Sven

+0

Es ist natürlich immer eine gute Idee, das Handbuch zu einem Befehl zu lesen, den Sie noch nie zuvor benutzt haben, anstatt nur ausschneiden und einfügen. Das erste Argument sollte 'AT_FDCWD' sein, wenn Pfad relativ ist und das dritte Argument' NULL' sein kann, zumindest auf GLIBC-Systemen, und wird dann auf die aktuelle Zeit, wie 'touch (1)', voreingestellt – troglobit