codice:
//Scrittura lista nel file
fwrite(dir_p -> d_name, (MAXLINE*sizeof(char)), 1, list_fd);
È sbagliato, d_name è una normale stringa C, per cui la devi scrivere semplicemente fino al terminatore di stringa, altrimenti sicuramente scriverai anche "spazzatura" che non c'entra niente. Puoi semplicemente sostituire la fwrite con una normale fputs:
codice:
fputs(dir_p->d_name,list_fd);
putc('\n');
La seconda istruzione inserisce un ritorno a capo per separare le varie righe.