Dirent结构体的成员

30

我开始使用dirent.h库,发现"struct dirent"结构体中有一个非常有用的成员"struct dirent *p->d_name"。但不幸的是,它没有说明这个结构体的其他成员;

我想知道这个结构体的其他成员是什么,以及它们有何用处?

顺祝商祺


3
我假设你正在使用Linux操作系统。在这种情况下,只需阅读dirent.h的手册页面(man dirent.h)即可。 - Nikos C.
2
@NikosC。dirent.h没有手动条目。 - Hi-Angel
3
你缺少POSIX man页面包。 (无论你的Linux发行版叫什么。 在我的(Gentoo)上,它是sys-apps / man-pages-posix)。 - Nikos C.
7
@NikosC. 哇,我从来不知道这里有比默认手册页更多的内容。实际上,在我的 Kubuntu 上,它是“manpages-posix-dev”软件包。 - Hi-Angel
3个回答

38

结构体struct dirent表示目录项。

http://www.gnu.org/software/libc/manual/html_node/Directory-Entries.html

在Linux中,它被定义为:

struct dirent {
    ino_t          d_ino;       /* inode number */
    off_t          d_off;       /* offset to the next dirent */
    unsigned short d_reclen;    /* length of this record */
    unsigned char  d_type;      /* type of file; not supported
                                   by all file system types */
    char           d_name[256]; /* filename */
};

参考:man readdir

或者在include目录中查找"dirent.h"。


5
如另一个回答所述,只有 d_inod_name 是符合 POSIX 标准的。其余部分应该避免使用,或者在必要时非常谨慎地使用,并且只有你理解其中的含义才能使用。 - 7heo.tk
3
其他字段仅用于极其简单的事情(例如确定条目是指文件还是子目录),告诉人们不要使用任何其他字段是无意义的(因为他们几乎总是必须使用它们)。 - Brendan

5

来自 维基百科dirent.h 只有两个成员:

  • ino_t d_ino - 文件序列号
  • char d_name[] - 条目名称(不会超过 NAME_MAX 大小)

请同时参考 Unix 规范


2
可能会有一些其他的(实现或系统特定的)成员,但出于 POSIX 可移植性的原因,您不应该使用它们。 - Basile Starynkevitch

1

除了@Binyamin Sharet的上述答案之外:

 off_t d_off - file offset
    unsigned short int d_reclen - length of the dirent record
    unsigned short int d_namlen - length of name
    unsigned int d_type - type of file

3
不应使用这些选项。它们是特定于实现的,而且 POSIX 没有定义它们。您可能需要更新您的回答以反映这一点。 - Nikos C.
一些文件系统(例如ext4,xfs)在某些配置(通常在mkfs时间)下可以提供目录条目(DT_*符号)的类型(某些或全部)。如果未知,则为DT_UNKNOWN。d_type成员不可移植,但仍然广泛可用。 - Remember Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接