开发者社区> 问答> 正文

用C程序写目录的内容

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

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

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

展开
收起
祖安文状元 2020-01-08 15:39:46 438 0
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_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")。

    2020-01-08 15:40:00
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
15分钟打造你自己的小程序 立即下载
小程序 大世界 立即下载
《15分钟打造你自己的小程序》 立即下载

相关实验场景

更多