2012-10-20 10 views
13

Zacząłem pracować z biblioteką dirent.h i natknąłem się na bardzo przydatnego członka konstruktora "struct dirent", który struct dirent * p-> d_name w mojej książce. Ale niestety nie stwierdza żadnych innych członków tej struktury;Członkowie struktury Dirent

Zastanawiam się, co jeszcze są członkowie tej struktury i do czego są one używane?

Pozdrowienia

+2

Zakładam, że jesteś w systemie Linux. W takim przypadku po prostu przeczytaj stronę podręcznika dirent.h ('man dirent.h'). –

+1

@NikosC. 'Brak wpisu ręcznego dla dirent.h' –

+2

@ Hi-Angel Brakuje pakietu stron podręcznika POSIX. (Cokolwiek nazywa się to w twojej dystrybucji Linuksa, na moim (Gentoo), to sys-apps/man-pages-posix). –

Odpowiedz

20

struktury, struct dirent odnosi się do pozycji katalogowych.

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

w Linuksie jest zdefiniowana jako:

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 */ 
}; 

patrz: man readdir

A wystarczy spojrzeć na "dirent.h" w katalogu include.

+2

Jak napisano w innej odpowiedzi, tylko 'd_ino' i' d_name' to [POSIX] (https://en.wikipedia.org/wiki/POSIX). Reszta powinna być unikana, lub w gorszym użyciu bardzo ostrożnie i tylko wtedy, gdy rozumiesz konsekwencje. –

2

Istnieją tylko dwa członkowie (wikipedia):

  • ino_t d_ino - plik numer seryjny
  • char d_name[] - nazwa wejścia (nie będzie przekraczać wielkości NAME_MAX)

Zobacz także unix spec.

+1

Może być kilka innych elementów (zależnych od implementacji lub systemu), ale nie powinieneś ich używać ze względu na przenośność POSIX. –

1

oprócz wyżej odpowiedzi na @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

Nie należy ich używać. Są one specyficzne dla implementacji i nie są definiowane przez POSIX. Powinieneś prawdopodobnie zaktualizować swoją odpowiedź, aby to odzwierciedlić. –

+0

jak działa d_type? – Naruto

+0

niektóre systemy plików (np. Ext4, xfs) w niektórych konfiguracjach (zwykle w czasie mkfs) mogą dostarczać typ (niektórych lub wszystkich) pozycji katalogu (symbole DT_ *). Jeśli nie są znane, mają wartość DT_UNKNOWN. Członek d_type nie jest przenośny, ale mimo to szeroko dostępny. –

Powiązane problemy