C程序编写目录的内容

问题描述 投票:-1回答:1

我需要用C编写ls程序的简化版本。它将列出当前目录的所有内容。运行时,它应显示与此命令相同的输出:

ls -alU --time-style=long-iso

没有向程序提供参数。我在入门时遇到了麻烦,但是我确实知道我将不得不进行一些系统调用,例如opendir(),readdir(),lstat()和getpwuid()。非常感谢您对我的帮助。我也很想了解这一点。谢谢!

c linux filesystems system-calls ls
1个回答
1
投票

逐项逐项从输出后退:

-rw-r--r--   1 kaz  kaz       3573 2018-06-07 13:59 .bashrc

名称.bashrc来自readdir遍历。

名称以外的所有内容都来自对该名称调用的lstat系统调用。

-rw...类型和标志表示来自st_mode,您必须将其解码为该格式。有一些访问宏可以提供帮助,例如S_ISDIR(mode)来测试它是否是目录,或者(mode & S_IXUSR) != 0来测试它是否可由所有者执行。 1是链接数st_nlinkkazkaz是用户ID和组ID,使用(例如)使用getpwuid转换为文本以获得struct passwd *,并使用getgrgid转换为具有名称字段的struct group *3753st_size。日期输出可以通过使用st_mtime功能格式化strftime来获得。

可以使用printfsprintf来格式化为填充的列,例如:printf("<%-50s>", "this-is-left-aligned-in-50-col-field")

© www.soinside.com 2019 - 2024. All rights reserved.