ls命令所需的系统调用与ls -l相比?

时间:2015-02-02 20:14:24

标签: linux bash ubuntu ls

所以基本上我有一个使用strace进行分析的赋值,ls命令需要系统调用来提供与ls -l相同的信息。

但是ls -l命令有很多奇怪的系统调用,例如使用/ etc / localtime调用stat 64作为每个文件的参数? 示例(对于当前目录中的每个文件重复此操作):

stat64( "/etc/localtime", {st_mode=S_IFREG|0644,
st_size=1892, ...}) = 0
write(1, "-rwxrwxr-x 1 john john 10441"..., 55-rwxrwxr-x
1 john john 10441 jan 1 14:39 stattest
) = 55
stat64( "/etc/localtime", {st_mode=S_IFREG|0644,
st_size=1892, ...}) = 0
write(1, "-rw-rw-r-- 1 john john 320"..., 57-rw-rw-r--
1 john john 320 jan 1 14:39 stattest.c
) = 57

为什么使用localtime作为每个文件的参数调用stat64?看起来有点奇怪。 不应该通过stat调用获得所有相关的文件信息吗?为什么ls -l需要使用lstat和许多其他不同的奇怪调用,套接字连接等。

有人可以帮我弄清楚基本系统调用什么来实际获取命令ls中缺少的相关信息,这是由ls -l给出的吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

某些libc函数可能会调用stat64调用,以将文件时间转换为您的本地时区。由于函数调用不会将时区信息保留在幕后(如果程序在执行过程中途改变了时区怎么办?),每次调用该调用时都会发生这种情况。

如果您想了解特定功能是什么,请使用gdb捕获系统调用并查看堆栈跟踪(有关详细信息,请参阅catch syscall上的GDB文档)。