#include <pwd.h>
#include <grp.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <sys/stat.h>
#include <sys/types.h>
/* effectue un ls dans rep */
void ls ( char * rep )
{
// descripteur de repertoire
DIR * nom_directorie ;
// structure d'une entree
struct dirent * fichier ;
// des infos sur le fichier courant
struct stat *infoFichier;
//pour manipuler la date du fichier
char date[64];
//pour manipuler le fichier courant
char repTemp[1024];
struct passwd * pw;
struct group * gr;
infoFichier = (struct stat *) malloc( sizeof(struct stat) );
// ourverture du repertoire
if ( (nom_directorie = opendir( rep ) )!=0 )
{
//Affichage du repertoire en cours de traitement
printf( "REPERTOIRE COURANT : %s\n" , rep );
// lectures des entrees
while ((fichier = readdir(nom_directorie)) != NULL)
{
// on evite les fichiers . et ..
if ( ( strcmp (fichier->d_name , "." ) == 0 ) || ( strcmp (fichier->d_name , ".." ) == 0 ) )
continue;
if ( (stat( fichier->d_name , infoFichier)) == 0)
{
pw = getpwuid( infoFichier->st_uid );
gr = getgrgid( pw->pw_gid );
printf("%lu\t" , infoFichier->st_nlink );
printf("%s\t" , pw->pw_name );
printf("%s\t" , gr->gr_name );
printf("%lu\t" , infoFichier->st_size );
ctime_r(&infoFichier->st_mtime , date );
date[19]='\0';
printf("%s" , date+4 );
printf("\t%s",fichier->d_name);
//si c'est un repertoire !
if( S_ISDIR( infoFichier->st_mode ) )
{
printf("/");
strcpy ( rep , repTemp );
strcat ( repTemp , "/" );
strcat ( repTemp , fichier->d_name );
printf( "appel du ls sur %s\n" , repTemp );
//appel recursif !
ls ( repTemp );
}
//on passe quand même à la ligne !
printf("\n");
}
}
closedir(nom_directorie);
}
}
int main ( int argc , char **argv )
{
// teste de bonne utilisation
if ( argc != 2 )
{
printf("usage : %s rep \n",argv[0]);
exit(1);
}
else ls( argv[1] );
}
hihihi !
Poste le Monday 17 November 2003 08:34:15