2009-03-16 15 views

risposta

7

Penso che tu voglia utime(2). Questo dovrebbe essere sufficiente:

utime(filename, NULL); 

La documentazione dicono:

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

[...]

La chiamata di sistema utime() cambia le accesso e modifica del inode specificato dal nome del file per i campi actime e modtime di volte rispettivamente.

Se i tempi sono NULL, i tempi di accesso e modifica del file sono impostati sull'ora corrente.

1

Penso che sia necessario guardare la chiamata di sistema utime()/utimes(). Non al mio computer normale, quindi non posso cercare i dettagli che temo.

10

utimes() è probabilmente come farlo. utime() è obsoleto.

Cose come questa sono banali da determinare usando strumenti come strace.

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

Credo che strace sia specifico per Linux e l'OP non ha menzionato quale UNIX ha usato (Solaris, FreeBSD, ecc. Hanno comandi simili ma non strace). – bortzmeyer

+0

Stranamente, POSIX contrassegna utimes() come legacy, anche se fornisce più funzionalità di utime() – Chris

+0

@Chris Non più. Secondo il numero 7 "Il marchio LEGACY è stato rimosso.". Fonte: http://pubs.opengroup.org/onlinepubs/9699919799/functions/futimens.html – Alexandros

1

Il vecchio utime() e utimes() sono OK per molti casi d'uso, ma per aggiornare atime & mtime con risoluzione nanosecondo, che è necessario sui sistemi moderni, uso:

utimensat(0, path, NULL, 0); 

Questo è molto utile in combinazione con il più recente stat() che restituisce un campo struct timespecst_mtim in struct stat con risoluzione in nanosecondi.

+0

Questa risposta è quasi corretta, ma invece di 0 come primo argomento si dovrebbe usare AT_FDCWD. Inoltre, il terzo argomento è un array di strutture 2 voltepec. – Sven

+0

Ovviamente è sempre una buona idea leggere il manuale in un comando che non hai mai usato prima, invece di solo copia-incolla. Il primo argomento dovrebbe essere 'AT_FDCWD' se il percorso è relativo e il terzo argomento può essere' NULL', almeno sui sistemi GLIBC, e sarà quindi predefinito all'ora corrente, come 'touch (1)' – troglobit

Problemi correlati