Devo fare la scansione di una directory in modo da avere l'elenco dei file contenuti in quella directory e nelle sottodirectory.

ho trovato questo:
codice:
	struct dirent **namelist; 
	int n; 
	n = scandir(".", &namelist, 0, alphasort); 
	if (n < 0) 
		perror("scandir"); 
	else 
		while(n--) 
			printf("%s\n", namelist[n]->d_name);
Che mi fa la scansione della directory iin cui sto lavorando, ma a me ne serve scandirne un'altra

o questo
codice:
	struct dirent *d;
 	DIR *dp;
  	//apertura della directory 
  	if ((dp=opendir(home)) == NULL)
	{
		exit (EXIT_FAILURE);
	}
	// stampa dei nomi dei file contenuti nella directory 
  	while (d = readdir(dp))
  	{
     		if (d->d_ino != 0)
		{
        		printf("%s\n", d->d_name);
		}
  	}
  	closedir(dp);
in cui mi fa la scansione della dir giusta, ma non mi va nelle stottodirectory.

Qualcuno sa darmi una mano?