| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 | #include <stdio.h>#include <dirent.h>#include <stdlib.h>#include <unistd.h>static int select_files(const struct dirent *dirbuf){	if (dirbuf->d_name[0] == '.')		return 0;	else		return 1;}int main(void){	struct dirent **array;	struct dirent *dirbuf;	int i, numdir;	chdir("/");	numdir = scandir(".", &array, select_files, NULL);	printf("\nGot %d entries from scandir().\n", numdir);	for (i = 0; i < numdir; ++i) {		dirbuf = array[i];		printf("[%d] %s\n", i, dirbuf->d_name);		free(array[i]);	}	free(array);	numdir = scandir(".", &array, select_files, alphasort);	printf("\nGot %d entries from scandir() using alphasort().\n", numdir);	for (i = 0; i < numdir; ++i) {		dirbuf = array[i];		printf("[%d] %s\n", i, dirbuf->d_name);	}	printf("\nCalling qsort()\n");	/* Even though some manpages say that alphasort should be	 * int alphasort(const void *a, const void *b),	 * in reality glibc and uclibc have const struct dirent**	 * instead of const void*.	 * Therefore we get a warning here unless we use a cast,	 * which makes people think that alphasort prototype	 * needs to be fixed in uclibc headers.	 */	qsort(array, numdir, sizeof(struct dirent *), (void*) alphasort);	for (i = 0; i < numdir; ++i) {		dirbuf = array[i];		printf("[%d] %s\n", i, dirbuf->d_name);		free(array[i]);	}	free(array);	return (0);}
 |