% cat test.c
#include <sys/stat.h>
#include <dirent.h>
#include <stdio.h>
#include <assert.h>
int main( int argc, char** argv )
{
DIR* dir ;
struct dirent* entry ;
struct stat buf ;
assert(argc == 2) ;
dir = opendir(argv[1]) ;
assert(dir != 0) ;
while( (entry = readdir(dir)) != 0 )
{
lstat(entry->d_name, &buf) ;
printf("name: %s --- S_ISDIR: %d\n",
entry->d_name,
S_ISDIR(buf.st_mode)) ;
}
return 0 ;
}
% gcc test.c -o test
% file *
file1: ASCII text
file2: ASCII text
somedir: directory
test: Mach-O executable i386
test.c: ASCII C program text
% ./test .
name: . --- S_ISDIR: 1
name: .. --- S_ISDIR: 1
name: file1 --- S_ISDIR: 0
name: file2 --- S_ISDIR: 0
name: somedir --- S_ISDIR: 1
name: test --- S_ISDIR: 0
name: test.c --- S_ISDIR: 0
% file somedir/*
somedir/file3: ASCII text
somedir/file4: ASCII text
somedir/somedir2: directory
% ./test somedir
name: . --- S_ISDIR: 1
name: .. --- S_ISDIR: 1
name: file3 --- S_ISDIR: 1
name: file4 --- S_ISDIR: 1
name: somedir2 --- S_ISDIR: 1
Note that file3 and file4 are not directories.