Ottimo thread... Bella idea andy!
Posso partire io?
Parto con la mia ultima creazione: "list.c"...
Per compilarlo basta dare un
"gcc list.c -o list"
e poi
"./list [directory]"
per eseguirlo... E' un sostituto dell'ls pieno di difetti...codice:#include <sys/types.h> #include <sys/stat.h> #include <dirent.h> #include <stdlib.h> #include <unistd.h> #define DIR_TO_SCAN "." #define VERDE_SCURO "\033[0;32m" #define VERDE_CHIARO "\033[1;32m" #define BLU_SCURO "\033[0;34m" #define BLU_CHIARO "\033[1;34m" #define GIALLO_SCURO "\033[0;33m" #define GIALLO_CHIARO "\033[1;33m" #define GRIGIO "\033[1;30m" #define RESET_COLOR "\x1b[00m" int main ( int argc, char * argv [] ) { DIR * directory; struct dirent * fileInDir; int fd; char * dirname; if ( argc > 2 ) { /* FIXME: Dovro' poter scannare piu' dirs. */ printf ( "Troppi argomenti.\nUsage: %s [DIRECTORY]\n", argv[0] ); exit ( 1 ); } else if ( argc == 2 ) { dirname = argv[1]; } else { /* if ( argc == 1 ) */ dirname = DIR_TO_SCAN; } directory = opendir ( dirname ); if ( directory == NULL ) { printf ( "Non posso fare un listato della directory \"%s\".\n" ); exit ( 1 ); } printf ( "Ecco il contenuto della directory \"%s\":\n", dirname ); fd = dirfd ( directory ); chdir ( dirname ); while ( ( fileInDir = readdir ( directory ) ) != NULL ) { struct stat data; printf ( "\t" ); stat ( fileInDir->d_name, &data ); if ( S_ISDIR ( data.st_mode ) ) { if ( fileInDir->d_name[0] == '.' || fileInDir->d_name[strlen(fileInDir->d_name)-1] == '~' ) printf ( "%s", BLU_SCURO ); else printf ( "%s", BLU_CHIARO ); } else if ( S_ISREG ( data.st_mode ) ) { if ( fileInDir->d_name[0] == '.' || fileInDir->d_name[strlen(fileInDir->d_name)-1] == '~' ) printf ( "%s", GRIGIO); } else { printf ( "%s", GIALLO_CHIARO ); } printf ( "%s%s %d bytes", fileInDir->d_name, RESET_COLOR, data.st_size ); printf ( "\n" ); } closedir ( directory ); return 0; }

Rispondi quotando