Besoin d'aide pour lister contenu d'un dossier

Besoin d'aide pour lister contenu d'un dossier - C - Programmation

Marsh Posté le 15-03-2006 à 12:56:05    

Bonjour,
J'ai besoin d'aide de connaisseurs en C , SVP ...
Je souhaite créer une fonction en C qui s'exécutera sous Linux.
Un peu comme ls, je veux lister les fichiers et répertoires d'un chemin indiqué ou du dossier courant si on ne précise pas de chemin.
 
Ce code arrive a lister uniquement les fichiers contenu :
***************************************************************
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
 
int main (int argc, char *argv[])
{
DIR *dirp;
struct dirent *entry;
 
switch (argc) {
case 2 :
dirp = opendir (argv[1]);
if (dirp == NULL) {
fprintf(stderr,"ne sait pas ouvrir %s \n",argv[1]);
return 0;
}
 
for(entry=readdir(dirp);entry!=NULL;entry = readdir(dirp)) {
if (entry->d_name[0] != '.')
printf ("%s\n",entry->d_name);
}
 
closedir(dirp);
break;
default :
fprintf(stderr,"Usage : myls dir_name \n" );
break;
}
return 0;
}
*****************************************************************
 
Moi, je souhaite avoir 2 options possibles :
-l (qui liste contenu fichiers + dossiers simplement Niveau 1 en formatant les colones)
exemple : -rwxr-xr-x   1 astek      operator     497 Oct 13 14:00 stream.a*
 
-R (Pour lister récursivement le dossier, soit son contenu + le contenu de ses dossiers)
 
Ces options doivent pouvoir être passées dans un sens quelconque et se cumuller.
 
Sans l'option -l , on ne gère pas le formatage en colones.
Il doit être capable de faire un "ls -l /dev /usr/sbin".
 
Je vous avoue être un peu perdu, donc toute aide concrète me sera la bienvenue !!!
Par avance UN ENORME MERCI !!

Reply

Marsh Posté le 15-03-2006 à 12:56:05   

Reply

Marsh Posté le 15-03-2006 à 20:55:17    

tu devrait utiliser un if à la place du switch.
 
Dans ce cas, on teste d abord les arguments avant de les traiter:
tu boucle sur les arguments tant qu il s agit d une option -l ou -R,
si tu tombe sur une autre option tu affiche un message d aide et tu quitte,
les arguments qui suivent sont les répertoires à traiter à l aide d une fonction, genre:
 
void lister(char* dir, int format_long, int recursif);
 
Tu appelle cette fonction pour tous les fichiers/répertoires en argument.
 
La fonction lister(), s apelle elle même si recursif.

Reply

Marsh Posté le 15-03-2006 à 21:13:55    

il y a la bibliotheque argtable pour parser une ligne de commande dans ce style
http://argtable.sourceforge.net/

Reply

Marsh Posté le 15-03-2006 à 23:08:49    

Il y a une fonction POSIX aussi: getopt(), dans unistd.h

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed