Très urgent: commande ls-l

Signaler
Messages postés
4
Date d'inscription
mardi 17 février 2009
Statut
Membre
Dernière intervention
25 février 2010
-
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
-
bj a tous: voila une implémentation de ls -l en c qui n'est pas complète
il ya quelques erreurs au niveau l'affichage des droits d'accés.....
est ce qu'il ya qq1 qui peut m'aider j'en est vraiment besoin:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include
#include <sys/stat.h>
#include
#include <grp.h>



main(int argc, char *argv[])
{
DIR *rep_cour; //crée un pointeur de type repertoire

struct dirent *entree; // crée un structure entrée repertoire
struct stat info;
struct passwd *p;
struct group *g;

char user[3],group[3],other[3],username,grname;
//# p=getpwuid(info.st_uid);
//# g=getgrgid(info.st_gid);
//Byte us1=0100;




rep_cour = opendir(".");// met dans rep_cour ce qui est lu dans le repertoire courant



while (entree=readdir(rep_cour))// tant que il n'est pas arrivé a la fin du repertoire
{
if(entree->d_name[0] != '.')//test si le premier est un caractère.
{
stat(entree->d_name,&info);
user[0]=((info.st_mode && 0000000100000000) ? 'r' : '-');
user[1]=((info.st_mode && 0000000010000000) ? 'w' : '-');
user[2]=((info.st_mode && 0000000001000000) ? 'x' : '-');

group[0]=((info.st_mode && 0000000000100000) ? 'r' : '-');
group[1]=((info.st_mode && 0000000000010000) ? 'w' : '-');
group[2]=((info.st_mode && 0000000000001000) ? 'x' : '-');

other[0]=((info.st_mode && 0000000000000100) ? 'r' : '-');
other[1]=((info.st_mode && 0000000000000010) ? 'w' : '-');
other[2]=((info.st_mode && 0000000000000001) ? 'x' : '-');
//p = getpwnam( (int) info.st_uid);
//username = (int) p->pw_name;
//g = getgrnam( (int) info.st_gid);
//grname = (int) g->gr_name;
printf("%d %d %s %s %s %s\n", entree->d_ino,info.st_nlink,user,group,other,/*username,grname,*/entree->d_name);
}
}

return 0;


}
et si possible les couleurs pendant l'affichage.
merci d'avvvvvvvvvvvvvvvvvance..........;;

1 réponse

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

Pour commencer, je te conseille fortement d'utiliser les maccros prédéfinies pour tester le mode plutôt que d'écrire toi même en dur tes masques binaires. `man 2 stat` te les indiquera avec précision.

Pour ce qui est de l'affichage, je te conseille de lire `man 3 printf` et en particulier la partie sur le format. Tu y apprendra ainsi à spécifier une longueur sur laquelle afficher un paramètre.

Je n'ai pas testé ton programme mais, si ça compile, je mise sur un magnifique segfault. Quand on affiche des chaînes de caractères qui ne sont pas terminées par le caractère nul et dont la longueur n'est pas explicitement spécifiée, c'est ce a quoi il faut s'attendre (par exemple les chaînes user, group et other).