2009-03-16 13 views

Odpowiedz

7

Myślę, że chcesz utime(2). To powinno wystarczyć:

utime(filename, NULL); 

Docs powiedzieć:

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

[...]

utime() wywołanie systemowe zmienia dostępu i modyfikacji czasy węzła określony przez nazwę pliku do pól czasu działania i modtime odpowiednio .

Jeśli czas wynosi NULL, czas dostępu i modyfikacji pliku to ustawiony na bieżący czas.

1

Myślę, że trzeba spojrzeć na wywołanie systemowe utime()/utimes(). Nie przy moim normalnym komputerze, więc nie mogę poszukać szczegółów, których się boję.

10

utimes() to prawdopodobnie jak to zrobić. utime() jest przestarzały.

Takie rzeczy są trywialne, aby określić za pomocą narzędzi takich jak 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

Wierzę, że strace jest specyficzne dla systemu Linux, a OP nie wspomniał o tym, którego systemu UNIX używał (Solaris, FreeBSD itp. Mają podobne polecenia, ale nie straceją). – bortzmeyer

+0

Dziwne, POSIX oznacza utime() jako dziedzictwo, mimo że zapewnia więcej funkcji niż utime() – Chris

+0

@Chris już nie. Zgodnie z wydaniem 7 "Oznaczenie LEGACY jest usunięte.". Źródło: http://pubs.opengroup.org/onlinepubs/9699919799/functions/futimens.html – Alexandros

1

Stary utime() i utimes() są OK dla wielu przypadków użycia, ale zaktualizować atime & mtime z rozdzielczością nanosekundy, które trzeba na nowoczesnych systemach, przeznaczenie:

utimensat(0, path, NULL, 0); 

Jest bardzo przydatne w połączeniu z nowszym stat(), który zwraca również pole struct timespecst_mtim w struct stat z rozdzielczością nanosekundową.

+0

Ta odpowiedź jest prawie poprawna, ale zamiast 0 jako pierwszego argumentu należy użyć AT_FDCWD. Trzecim argumentem jest tablica 2 struktur czasowych. – Sven

+0

Oczywiście zawsze dobrze jest przeczytać instrukcję do polecenia, którego nigdy wcześniej nie używałeś zamiast wycinania i wklejania. Pierwszym argumentem powinno być 'AT_FDCWD', jeśli ścieżka jest względna, a trzeci argument może mieć wartość' NULL', przynajmniej w systemach GLIBC, a następnie będzie domyślny na bieżący czas, np. 'Touch (1)' – troglobit

Powiązane problemy