Il touch comando ti permette di modificare il modifica tempo e / o il accesso tempo. Non è possibile impostare il modificare tempo arbitrario: è impostato sul momento in cui si modifica una delle altre due volte.
La ragione di questo è quello touch fa affidamento su una chiamata di sistema che può fare solo le combinazioni sopra annotate. Il codice sorgente (in GNU coreutils) usa questo blocco:
ok = (fdutimensat (fd, AT_FDCWD, (fd == STDOUT_FILENO ? NULL : file), t,
(no_dereference && fd == -1) ? AT_SYMLINK_NOFOLLOW : 0)
== 0);
che a sua volta (vedi fonte ) chiama futimens o utimensat. Queste funzioni sono entrambe POSIX , che nota
Al completamento, futimens() e utimensat() deve segnare l'ultimo file cambiamento di stato timestamp per l'aggiornamento.
Il cambiamento di stato timestamp è ciò che non puoi impostare in modo arbitrario.
Le due funzioni POSIX accettano timespec parametri, che forniscono una risoluzione in nanosecondi. Il filesystem del tuo computer può o non può supportarlo (anche se il risultato da stat indica che potrebbe).
Lo stile POSIX predefinito -t l'opzione è limitata alla risoluzione di 1 secondo. Tuttavia (ancora POSIX ) il -d opzione prevede frazioni di un secondo:
YYYY-MM-DDThh:mm:SS[.frac][tz]
GNU coreutils supporta questo -d opzione, che consente la risoluzione di nanosecondi. Il documentazione per touch dà come esempio
--date="2004-02-27 14:19:13.489392193 +0530"
(dove --date è un nome lungo equivalente a -d ).
last changetempo?