path_stat.st_mode
est toujours égal à 16877
La valeur de st_mode
doit être interprétée par bits:
Les 12 bits bas sont les autorisations d'accès aux fichiers que vous pouvez définir avec chmod
. Chaque bit représente une autorisation de fichier. Les 4 bits élevés sont le type de fichier.
Les 12 bits faibles du nombre de 16 bits 16877
seraient 000111101101
. Cette combinaison signifie:
---rwxr-xr-x
(lire, écrire, exécuter pour le propriétaire du fichier, lire et exécuter pour les autres). Cette combinaison est typique pour les répertoires et pour les fichiers exécutables.
Les 4 bits hauts du nombre 16877
sont 4 qui (au moins sur Linux signifie): "Répertoire".
S_ISREG(path_stat.st_mode)
est toujours égal à ...
La S_ISREG
macro vérifie simplement si les 4 bits supérieurs de l'argument ont la valeur qui signifie: « Type de fichier est un fichier régulier. »
... est toujours égal à 1
Cela me confond un peu: 16877
devrait être un répertoire; cependant S_ISREG
devrait retourner 1 pour les fichiers ordinaires et 0 pour toute autre chose (comme les répertoires). Lorsque la valeur renvoyée est `1`, il s'agit d'un fichier normal.
La valeur '16877' est la combinaison des bits d'autorisation de fichier et des bits de mode de fichier (et quelques autres choses.) I.E. c'est une carte de bits et la macro 'S_ISREG' est simplement en train d'extraire un seul bit de ce champ de statistiques. Suggère de lire le fichier 'man' pour' stat'. – user3629249