Listando arquivos e diretórios com C

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main(void) {
	struct dirent **namelist;
	int n;

	n = scandir(".", &namelist, 0, alphasort);

	if (n < 0) perror("scandir");

	while (n-- > 0) {
		printf("%s\n", namelist[n]->d_name);
		free(namelist[n]);
	}

	free(namelist);

	return 0;
}

Compilando

$ gcc demo.c -o demo