Files

touch -t 如何在內部工作?

  • April 11, 2015

command如何在touch -t內部準確地工作(我試圖找到它的原始碼但找不到)?

touch呼叫utimes系統呼叫來設置文件的修改時間和訪問時間。在某些系統上,它不是utimes,而是打開文件,然後通過描述符設置文件時間,例如utimensat在 Linux 下。

您可以touch通過查看系統呼叫的方式來了解您的系統是如何工作的。在 Linux 下,使用strace,例如strace touch -d '1 hour ago' foo.

在哪裡可以找到原始碼取決於您的作業系統。GNU 版本在coreutils中,在任何 BSD 的主原始碼樹中都有一個版本,在BusyBoxMinix中都有一個版本,等等。

有時您甚至不需要原始碼。使用strace.

$ strace touch -t 201212121212 foobar
execve("/usr/bin/touch", ["touch", "-t", "201212121212", "foobar"], [/* 61 vars */]) = 0
[...] lots of noise [...]
open("foobar", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
dup2(3, 0)                              = 0
close(3)                                = 0
utimensat(0, NULL, {{1355310720, 0}, {1355310720, 0}}, 0) = 0
close(0)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

為什麼你好,utimensat()。你是做什麼的?

$ man utimensat

NAME
  utimensat, futimens - change file timestamps with nanosecond precision

所以有一個函式可以更改文件時間戳,並touch使用它來更新文件的時間戳。這就是它在內部的運作方式。

引用自:https://unix.stackexchange.com/questions/78639