Membrii structurii de conducere (Programare, C, Linux, Dir, Readdir, Dirent.H)

Naruto a intrebat.

Am început să lucrez cu biblioteca dirent.h și am dat peste un membru foarte util al structurii „struct dirent” structer care struct dirent *p->d_name în cartea mea. Dar, din păcate, nu afirmă nici un alt membru al acestei structuri;

Mă întrebam care sunt ceilalți membri ai acestei structuri și la ce sunt folosiți?

Salutări

Comentarii

  • Presupun că sunteți pe Linux. În acest caz, citiți pur și simplu pagina de manual dirent.h (man dirent.h). –  > Por Nikos C..
  • @NikosC. No manual entry for dirent.h –  > Por Hi-Angel.
  • @Hi-Angel Îți lipsește pachetul POSIX man-pages. (Indiferent cum se numește în distribuția ta Linux. Pe al meu (Gentoo), este sys-apps/man-pages-posix). –  > Por Nikos C..
  • @NikosC. wow, nu am știut niciodată că aici există mai mult decât paginile de manual implicite. Într-adevăr, pe Kubuntu al meu era pachetul manpages-posix-dev. –  > Por Hi-Angel.
3 răspunsuri
askmish

Structura, struct dirent se referă la intrarea în director.

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

În linux este definit ca:

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

refer: man readdir

Sau pur și simplu căutați „dirent.h” în directorul include.

Comentarii

  • După cum s-a scris într-un alt răspuns, doar d_ino și d_name sunt POSIX. Restul ar trebui evitate sau, în cel mai rău caz, utilizate cu mare precauție și numai dacă înțelegeți implicațiile. –  > Por 7heo.tk.
  • Restul câmpurilor sunt necesare doar pentru lucruri extrem de simple (cum ar fi determinarea dacă o intrare se referă la un fișier sau la un subdirector), iar a le spune oamenilor să nu folosească niciunul dintre celelalte câmpuri este inutil (deoarece aproape întotdeauna trebuie să le folosească). –  > Por Brendan.
MByD

Există doar doi membri (de la wikipedia):

  • ino_t d_ino – numărul de serie al fișierului
  • char d_name[] – numele intrării (nu va depăși dimensiunea NAME_MAX)

Aruncați o privire la specificațiile unix de asemenea.

Comentarii

  • Este posibil să existe și alți membri (specifici implementării sau sistemului), dar nu ar trebui să îi utilizați din motive de portabilitate POSIX. –  > Por Basile Starynkevitch.
Ravindra Bagale

în plus față de răspunsul de mai sus al lui @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

Comentarii

  • Acestea nu ar trebui să fie utilizate. Ele sunt specifice implementării și nu sunt definite de POSIX. Probabil că ar trebui să vă actualizați răspunsul pentru a reflecta acest lucru. –  > Por Nikos C..
  • unele sisteme de fișiere (de exemplu, ext4, xfs), în anumite configurații (de obicei în momentul mkfs), pot furniza tipul (unora sau tuturor) intrărilor din directoare (simbolurile DT_*). Dacă nu sunt cunoscute, acestea sunt DT_UNKNOWN. Membrul d_type nu este portabil, dar este totuși disponibil pe scară largă. –  > Por Rețineți că Monica.