如何使用C获取类似于“ls -la”的文件信息?

时间:2011-10-30 03:54:35

标签: c file unix struct

我使用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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:1)

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

捕获ls -la的输出是可能的,但不是一个好主意。人们可能期望shell脚本,但不是C或C ++程序。如果你能提供帮助,那么在Python或perl中做错也就是错误。

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

答案 2 :(得分:0)

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

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

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