我需要用C编写ls程序的简化版本。它将列出当前目录的所有内容。运行时,它应显示与此命令相同的输出:
ls -alU --time-style=long-iso
没有向程序提供参数。我在入门时遇到了麻烦,但是我确实知道我将不得不进行一些系统调用,例如opendir(),readdir(),lstat()和getpwuid()。非常感谢您对我的帮助。我也很想了解这一点。谢谢!
逐项逐项从输出后退:
-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_nlink
。 kaz
和kaz
是用户ID和组ID,使用(例如)使用getpwuid
转换为文本以获得struct passwd *
,并使用getgrgid
转换为具有名称字段的struct group *
。 3753
是st_size
。日期输出可以通过使用st_mtime
功能格式化strftime
来获得。
可以使用printf
或sprintf
来格式化为填充的列,例如:printf("<%-50s>", "this-is-left-aligned-in-50-col-field")
。