2012-10-20 117 views
13

我已經開始使用dirent.h庫,並且在我的書中遇到了「struct dirent」structer的一個非常有用的成員,其中struct dirent * p-> d_name。但不幸的是,它沒有說明這種結構的任何其他成員;Dirent結構的成員

我想知道這個結構的成員還有什麼,它們用於什麼?

問候

+2

我假設你在Linux上。在這種情況下,只需閱讀dirent.h手冊頁('man dirent.h')。 –

+1

@NikosC。 '沒有手動輸入dirent.h' –

+2

@ Hi-Angel您錯過了POSIX man-pages軟件包。 (不管它在你的Linux發行版中被稱爲什麼,在我的(Gentoo),它是sys-apps/man-pages-posix)。 –

回答

20

結構,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

或者只是看在包括目錄 「dirent.h」。

+2

正如另一個答案中所寫,只有'd_ino'和'd_name'是[POSIX](https://en.wikipedia.org/wiki/POSIX)。其餘的應該避免,或更糟糕地使用,只有當你明白其含義。 –

2

只有兩個成員(從wikipedia):

  • ino_t d_ino - 文件編號
  • char d_name[] - 條目名稱(不超過一個大小NAME_MAX的)

看看unix spec以及。

+1

可能有一些其他(實現或系統特定的)成員,但不應該將它們用於POSIX可移植性原因。 –

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定義的。您應該更新您的答案以反映這一點。 –

+0

d_type如何工作? – Naruto

+0

某些配置(通常爲mkfs時間)的某些文件系統(例如ext4,xfs)可以傳遞目錄項(DT_ *符號)的類型(部分或全部)。如果不知道,它們是DT_UNKNOWN。 d_type成員不可移植,但仍然廣泛可用。 –