【问题标题】:How to get file information similar to "ls -la" using C?如何使用C获取类似于“ls -la”的文件信息?
【发布时间】:2011-12-18 02:20:30
【问题描述】:

我使用 ar.h 来定义结构。我想知道如何获取有关文件的信息并将其放入结构中的指定变量中。

struct ar_hdr {
    char ar_name[16];       /* name of this member */
    char ar_date[12];       /* file mtime */
    char ar_uid[6];         /* owner uid; printed as decimal */
    char ar_gid[6];          /* owner gid; printed as decimal */
    char ar_mode[8];        /* file mode, printed as octal   */
    char ar_size[10];       /* file size, printed as decimal */
    char ar_fmag[2];        /* should contain ARFMAG */
};

使用上面定义的结构,我将如何从ls -la的文件中获取信息

-rw-rw----. 1 clean-unix upg40883 368 Oct 29 15:17 testar

?

【问题讨论】:

标签: c file unix struct


【解决方案1】:

您正在寻找stat(2,3p)

【讨论】:

  • 你是对的,这是比我建议的更合适的方法。
  • 看起来像。如果我有多个文件怎么办......例如我运行这个命令。 % ./foo file1 file2 file3。是否可以获得所有这三个文件信息?尝试在 unix 中编写 ar -q 命令。大声笑
  • 是的,它奏效了。非常感谢。我也用过 fstat。现在我只需要循环它,这样它就可以一次显示多个文件。惊人的。您是否知道如何使用该结构将其放入存档文件中?不管怎样,你一直很有帮助。
【解决方案2】:

为了模拟ls -la 的行为,您需要readdirstat 的组合。执行man 3 readdirman 2 stat 以获取有关如何使用它们的信息。

捕获ls -la 的输出是可能的,但不是一个好主意。人们可能期望的是 shell 脚本,而不是 C 或 C++ 程序。如果可以的话,在 Python 或 perl 中做这件事甚至是错误的。

您必须自己根据可用数据构建结构。 strftime 可用于以您喜欢的方式格式化时间。

【讨论】:

    【解决方案3】:

    对于将有关单个文件的数据收集到存档标题条目中,主要答案是stat();在其他情况下(例如ls -la),您可能还需要使用lstat()readlink()。 (注意:readlink() 不会终止其返回字符串!)

    使用ls -la,您可能会使用opendir() 系列函数(readdir()closedir())来读取目录的内容。

    如果您需要处理递归搜索,那么您可以查看nftw()。 (还有一个功能较弱的ftw(),但你最好使用nftw()。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 2012-04-06
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      相关资源
      最近更新 更多