Per sapere se e' una directory o meno puoi fare:
codice:
DIR * directory;
struct dirent * possilbe_subdir;
int fd;
struct stat data;
directory = opendir ( directory_path );
if ( directory == NULL ) {
printf ( "Impossibile accedere a %s.\n", directory_path );
exit ( 1 );
}
fd = dirfd ( directory );
chdir ( directory_path );
while ( ( possilbe_subdir = readdir ( directory ) ) != NULL ) {
if ( ! strcmp ( possilbe_forum->d_name, ".." ) || ! strcmp ( possilbe_forum->d_name, "." ) )
continue;
stat ( possilbe_subdir->d_name, &data );
if ( S_ISDIR ( data.st_mode ) ) {
printf ( "Trovata la sottodirectory %s.\n", possilbe_subdir->d_name );
}
}
closedir ( directory );
E' una funzione che ho fatto un paio di giorni fa, l'ho provata un po' e dovrebbe funzionare...
Se c'e' qualche problema e' colpa dei nomi delle variabili, che ho modificato adesso per far capire meglio il programma...
Non controlla esplicitamente i permessi, ma prova direttamente ad entrare nella directory e cercare le sottodirectories...
Funziona cosi':
prova ad aprire la dir "directory_path"
se ce la fa ci si sposta dentro ***
e legge ogni nome di file presente nella directory
se quel file e' "." (la dir corrente) o ".." (la dir superiore) lo salta
altrimenti fa lo stat del file trovato
se e' una dir lo comunica all'utente
*** E' necessario spostarcisi poiche' quando viene usata la funzione stat che prende come parametro un nome di file, lo va a cercare nella directory corrente.
Se quindi ti trovi fuori dalla directory dove hai trovato quel file (se ti trovi in una dir dove quel file non e' presente) ti dice che e' un regular file, anche se in realta' non esiste...