【问题标题】:C Program to write the contents of a directoryC程序写入目录的内容
【发布时间】:2019-10-30 00:27:11
【问题描述】:

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

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

没有为程序提供任何参数。我在开始时遇到了困难,但我知道我将不得不进行一些系统调用,例如 opendir()、readdir()、lstat() 和 getpwuid()。非常感谢任何帮助我离开地面并进入它的帮助。我也很想明白这一点。谢谢!

【问题讨论】:

  • 你问得太早了。阅读这些功能的手册页,了解如何使用它们并编写一些代码,然后在遇到任何问题时来这里并解释您所面临的问题究竟是什么。不幸的是,这个问题既离题又太宽泛。
  • “我无法开始使用”。我建议你从int main(void) { return 0; } 开始,因为你似乎还没有那么多。

标签: c linux filesystems system-calls ls


【解决方案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,使用(例如)getpwuid 转换为文本以获得struct passwd *getgrgid 获得具有名称字段的struct group *3753st_size。使用strftime函数格式化st_mtime可以得到日期输出。

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

【讨论】:

  • 这是一个巨大的帮助。我现在走在正确的轨道上,谢谢。
猜你喜欢
  • 2012-02-19
  • 2013-05-23
  • 2021-02-16
  • 1970-01-01
  • 2021-06-22
  • 2013-09-22
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多