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.
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.
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.
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.
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.