【问题标题】:ls command required system calls compared to ls -l?与 ls -l 相比,ls 命令需要系统调用吗?
【发布时间】:2015-02-02 20:14:23
【问题描述】:

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

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

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

为什么每个文件都使用本地时间作为参数调用 stat64?似乎有点奇怪。 不应该所有相关的文件信息都可以通过 stat 调用获得吗?为什么 ls -l 需要使用 lstat 和许多其他不同的奇怪调用、套接字连接等。

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

谢谢!

【问题讨论】:

    标签: linux bash ubuntu ls


    【解决方案1】:

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

    如果您想找出具体是哪个函数在执行此操作,请使用 gdb 捕获系统调用并查看堆栈跟踪(有关详细信息,请参阅 GDB 文档catch syscall)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 2020-07-15
      • 2011-01-15
      • 1970-01-01
      • 2012-04-10
      • 2016-11-15
      • 2016-07-26
      • 1970-01-01
      相关资源
      最近更新 更多