Programmation de la commande ls pour un debutant en langage C
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 )
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
|
#include <sys/stat.h>
#include <stdio.h>
#include<dirent.h>
#include<errno.h>
#include<unistd.h>
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.