Très urgent: commande ls-l

cs_SAADOULI Messages postés 4 Date d'inscription mardi 17 février 2009 Statut Membre Dernière intervention 25 février 2010 - 7 nov. 2009 à 02:54
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 - 7 nov. 2009 à 08:26
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

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
7 nov. 2009 à 08:26
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).
0
Rejoignez-nous