Grazie, quella parte l'avevo già letta, anche se non ho capito l'esempio. Posto come ho fatto:

DIR *dp;
FILE *list_fd;
struct dirent *dir_p;
char lista_file[20] = "Lista";

int main()
{


//Directory di lavoro, se riuscissi dovrei poter usare una directory diversa
getcwd(directory, sizeof(directory));

//Apertura della directory
dp = opendir(directory);
printf("Directory aperta.\n");

//Controllo
if(dp == NULL) exit(1);

printf("Funziona\n");
dir_p = readdir(dp);
//Apertura file della lista, se non esiste viene creato
list_fd = fopen (lista_file, "w+b");

//Scrittura lista nel file
fwrite(dir_p -> d_name, (MAXLINE*sizeof(char)), 1, list_fd);

closedir(dp);
fclose(list_fd);
}

Il problema è che il file della lista oltre ai nomi dei file della cartella, stampa anche caratteri a caso mette tutto in riga e non in colonna.