gpt4 book ai didi

linux - 与 ls -l 相比,ls 命令需要系统调用吗?

转载 作者:太空宇宙 更新时间:2023-11-04 10:57:32 26 4
gpt4 key购买 nike

所以基本上我有一个任务要使用 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 给出的吗?

谢谢!

最佳答案

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

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

关于linux - 与 ls -l 相比,ls 命令需要系统调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com