codice:
#include <stdio.h>
#include <dirent.h>
#include <sys/stat.h>

void sansone(const char *directory)
	{
		DIR *fh;
		struct dirent *fdata;
		char source[1000];
		struct stat buf;
		if ((fh = opendir (directory)) != NULL)
   		{
			puts("\nElenco directory:\n");
			while ((fdata = readdir (fh)) != NULL)
      			{
				//scarta le directory . e ..
				if (!strcmp (fdata->d_name, ".") || !strcmp (fdata->d_name, ".."))
            				continue;//salta al prossimo giro
               			// Verifica se si tratta di una subdir
         			sprintf (source, "%s/%s", directory, fdata->d_name);
         			stat (source, &buf);
/***********************************************************************************/
				puts("directory");
		       		printf("%s\n", source);
				puts("inserisci un carattere");
				getchar();
/***********************************************************************************/			
         			if (S_ISDIR(buf.st_mode))
         			{
/***********************************************************************************/
					puts("prima sotto directory\n");
					getchar();

					sansone(source);
/***********************************************************************************/	

				}
			}

      			closedir (fh);
		}

	}

/*********************************** 
 * main
 **********************************/
int main ()
{
	
	const char *home = "/home"; //directory home dove si mettono i file
	sansone (home);

return 0;
}
Così mi sembra che funzioni, se ci sono errori vedremo...
ora devo solo usare l'elenco