2017-10-18 27 views
0

Je suis confus par l'utilisation de d_name[256] et NAME_MAX dans la définition struct dirent. Est-ce que d_name[256] signifie que la longueur du nom de fichier peut être au maximum de 256 caractères? Puis il mentionne aussi NAME_MAX (cité en bas). Donc, ma question est comment NAME_MAX se rapporte ici et où puis-je trouver NAME_MAX valeur et définition?struct dirent dans C d_name [256] et la définition NAME_MAX

En man readdirstruct dirent est défini comme suit.

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

Il affirme également que

Les seuls champs de la structure dirent qui sont mandatés par POSIX.1 sont: d_name[], de taille quelconque, avec au plus NAME_MAX caractères précédant le zéro de terminaison octet ('\ 0'); et (sous la forme d'une extension XSI sion) d_ino. Les autres champs ne sont pas normalisés et ne sont pas présents sur tous les systèmes; Voir les NOTES ci-dessous pour plus de détails.

Répondre

2

NAME_MAX est déclaré dans limits.h. Vous pouvez également utiliser pathconf() ou fpathconf() pour obtenir la limite par système de fichiers.

long max = pathconf(pathname, _PC_NAME_MAX); 

Puisque la structure a été codé en dur à 256, il ne peut pas gérer réellement les systèmes de fichiers avec des noms plus longs. Donc, NAME_MAX sera nécessairement au plus 255 (ce qui est en effet sa valeur sur ma machine OS X).

+0

NAME_MAX n'inclut pas le terminateur, juste strlen, donc il correspond à d_name. –