这是
this question.为什么touch会调用dup2()系统调用?
$> strace touch 1 2>&1 | tail
close(3) = 0
open("1", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
dup2(3, 0) = 0
close(3) = 0
utimensat(0, NULL, NULL, 0) = 0
close(0) = 0
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
最佳答案 这是一件历史文物.
open()dup2()模式来自fd_reopen()函数,该函数由coreutils代码库中的几个程序使用.
在coreutils commit e373bb1之前,fd_reopen()没有执行open()dup2(),但在打开新文件描述符之前关闭了所需的文件描述符.触摸在coreutils commit 478bd89开始使用此功能就是这种情况.根据提交消息,目的是减少触摸打开的文件描述符的数量.