Programmation de la commande ls pour un debutant en langage reseaux C
ced57350
Messages postés1Date d'inscriptionsamedi 8 septembre 2007StatutMembreDernière intervention 9 mars 2009
-
9 mars 2009 à 15:55
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 2012
-
9 mars 2009 à 18:48
Bonjour,
J'ai pour mission de coder la fonction ls avec le maximum d'option.
Pour l'instant j'ai réussi a programmer une commande permettant de faire comme un ls -l mais avec en plus affichage des droits ( rwx )
#include <sys/stat.h>
#include <stdio.h>
#include<dirent.h>
#include<errno.h>
#include
int main (int argc, char* argv[])
{
DIR* ptdir;
struct dirent* entree;
char les_droits[8][4] = {"---", "--x", "-w-", "-wx", "r--", "r-x", "rw-","rwx" };
int droit;
int bool;
struct stat info;
ptdir = opendir(".");
if (!ptdir) { fprintf(stderr,"pb opendir\n");
exit(1);
}
while ((entree = readdir (ptdir)) != NULL)
{if (argc==0)
printf ("%s %d \n",entree->d_name, entree->d_ino);
else {
bool = lstat (entree->d_name, &info);
if (bool == -1){printf ("chemin inexistant\n");}
else {
if (entree->d_name[0] != ".")
printf ("%s", les_droits[(droit>>6)&7] ); // décale de 6 bits et fait une somme bit à bit avec 7 donc fait apparaitre les droits propriétaire
printf ("%s", les_droits[(droit>>3)&7] ); // même opération mais décale de 3 --> droits groupe
printf ("%s", les_droits[(droit)&7] ); // même opération mais ne décale pas pour faire apparaitre les droits des autres.
printf ("%s %d \n",entree->d_name, entree->d_ino);
droit = info.st_mode; //met les droits en binaire dans droit
}}}
closedir(ptdir);
return(0);
}
Il me reste les autre options mais je ne voit pas trop comment faire donc je me permet de vous demander de m'aider pour les autres options.
Pourriez-vous m'indiquer quelles pistes suivrent?
Je vous remercie d'avance.
Au revoir.