Files
touch -t 如何在內部工作?
command如何在
touch -t
內部準確地工作(我試圖找到它的原始碼但找不到)?
touch
呼叫utimes
系統呼叫來設置文件的修改時間和訪問時間。在某些系統上,它不是utimes
,而是打開文件,然後通過描述符設置文件時間,例如utimensat
在 Linux 下。您可以
touch
通過查看系統呼叫的方式來了解您的系統是如何工作的。在 Linux 下,使用strace,例如strace touch -d '1 hour ago' foo
.在哪裡可以找到原始碼取決於您的作業系統。GNU 版本在coreutils中,在任何 BSD 的主原始碼樹中都有一個版本,在BusyBox和Minix中都有一個版本,等等。
有時您甚至不需要原始碼。使用
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
使用它來更新文件的時間戳。這就是它在內部的運作方式。