0 votes

Y a-t-il une fonction C pour obtenir les autorisations du répertoire ?

Je suis en train d'essayer d'implémenter la commande ls en C sans utiliser la fonction system.

Est-ce qu'il existe une fonction C pour obtenir les autorisations du répertoire/fichier, afin que je puisse les afficher?

Merci.

3voto

paxdiablo Points 341644

La fonction stat() prend une chaîne de caractères de nom de fichier et renvoie la structure suivante :

struct stat {
    dev_t     st_dev;     /* ID du périphérique contenant le fichier */
    ino_t     st_ino;     /* numéro d'inode */
    mode_t    st_mode;    /* protection */
    nlink_t   st_nlink;   /* nombre de liens physiques */
    uid_t     st_uid;     /* ID utilisateur du propriétaire */
    gid_t     st_gid;     /* ID du groupe du propriétaire */
    dev_t     st_rdev;    /* ID périphérique (si fichier spécial) */
    off_t     st_size;    /* taille totale, en octets */
    blksize_t st_blksize; /* taille de bloc pour les E/S du système de fichiers */
    blkcnt_t  st_blocks;  /* nombre de blocs alloués */
    time_t    st_atime;   /* heure du dernier accès */
    time_t    st_mtime;   /* heure de la dernière modification */
    time_t    st_ctime;   /* heure du dernier changement de statut */
};

Cela fonctionne également bien sur les entrées de répertoire ainsi que sur les fichiers et le champ spécifique que vous recherchez est st_mode.

Le fichier d'en-tête devrait contenir cette structure et toutes les définitions ainsi que les #defines et/ou macros pour décoder intelligemment les champs (voir ici pour un exemple).

Si vous êtes intéressé par la façon dont cela est réellement fait, vous pouvez consulter le code source de ls dans les coreutils de GNU. Mais utilisez cela uniquement à des fins d'éducation. C'est sous licence GPL, alors vous ne pouvez pas simplement le prendre à des fins personnelles et, si c'est pour vos devoirs, votre éducateur vous échouera presque certainement si vous remettez quelque chose qui ressemble trop à ceci.

2voto

unwind Points 181987

Regardez dans [stat()](http://linux.die.net/man/2/stat). Il semble que vous soyez sur un système Linux ou POSIX, donc c'est la bonne manière.

Ensuite, regardez le champ st_mode de la struct stat, il contient les informations sur les bits de protection, souvent appelés collectivement le "mode" d'un fichier (comme le reflète la commande chmod qui change les paramètres).

Aller des bits binaires à une représentation textuelle comme ls' ... est un défi intéressant.

2voto

Bastien Léonard Points 18404

La famille des fonctions stat (stat(), lstat(), fstat()).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X