2012-10-20 20 views
13

Ho iniziato a lavorare con la libreria dirent.h e mi sono imbattuto in un membro molto utile della struct "struct dirent" che struct dirent * p-> d_name nel mio libro. Ma sfortunatamente non afferma nessun altro membro di questa struttura;Membri della struttura Dirent

Mi chiedevo cos'altro sono i membri di questa struttura e per cosa sono utilizzati?

saluti

+2

Presumo che tu sia su Linux. In tal caso, leggi semplicemente la pagina di manuale dirent.h ('man dirent.h'). –

+1

@NikosC. 'Nessuna voce manuale per dirent.h' –

+2

@ Hi-Angel Manca il pacchetto man-pages POSIX. (Qualunque cosa si chiami nella tua distribuzione Linux. Su mia (Gentoo), è sys-apps/man-pages-posix). –

risposta

20

La struttura, struct dirent si riferisce alla voce di directory.

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

In Linux si è definito come:

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

riferiscono: man readdir

O solo cercare "dirent.h" nella directory includere.

+2

Come scritto in un'altra risposta, solo 'd_ino' e' d_name' sono [POSIX] (https://en.wikipedia.org/wiki/POSIX). Il resto dovrebbe essere evitato, o al peggio usato con molta cautela, e solo se ne capisci le implicazioni. –

2

Ci sono solo due membri (da wikipedia):

  • ino_t d_ino - I file di numero di serie
  • char d_name[] - nome di entrata (non supererà una dimensione di NAME_MAX)

Dai un'occhiata anche allo unix spec.

+1

Potrebbero esserci altri membri (di implementazione o specifici del sistema), ma non è necessario utilizzarli per motivi di portabilità POSIX. –

1

in aggiunta a risposta sopra di @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

Questi non dovrebbero essere usati. Sono specifici dell'implementazione e non sono definiti da POSIX. Probabilmente dovresti aggiornare la tua risposta per riflettere questo. –

+0

come funziona d_type? – Naruto

+0

alcuni filesystem (ad esempio ext4, xfs) in alcune configurazioni (di solito in tempo mkfs) possono fornire il tipo di (alcune o tutte) le voci della directory (i simboli DT_ *). Se non conosci, sono DT_UNKNOWN. Il membro d_type non è portatile, ma comunque ampiamente disponibile. –