我需要用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的使用转换为文本(例如)getpwuid获得struct passwd *,并且getgrgid获得struct group *具有名称字段。该3753是st_size。日期输出可以通过st_mtime使用strftime函数进行格式化来获得。
格式化为填充列可以使用printf或来完成sprintf,例如:printf("<%-50s>", "this-is-left-aligned-in-50-col-field")。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。