Useful if you need your program to scan a subdirectory.  A useful enhancement to this code would be to report an error if more than one command-line parameter is entered.


(right-click to download)

/* CExplore The DIRENT library provides handy functions */
/* to read (sub)directory locations on our filesystem. */
/* NOTE: dirent.h and its functions are not considered */
/* part of the 'C' standard. They are a sort of pseudo- */
/* standard, yet are generally portable. */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>   // for the DIRENT functions

int main(int argc, char *argv[])
char dirspec[128];
struct dirent *entry;
DIR *dp;

if (argc == 2)
     strcpy(dirspec, argv[1]);
     strcpy(dirspec, "./");


dp = opendir(dirspec);
if (dp == NULL) {

while ((entry = readdir(dp)) != (struct dirent *) NULL) {
     printf("File %-32s = ", entry->d_name);

     // the 'switch' + 'case' is akin to IF - ELSE IF - ELSE IF - ELSE IF - ELSE IF
     switch(entry->d_type) {
          case DT_UNKNOWN : printf("unknown type\n"); break;
          case DT_REG : printf("regular file\n"); break;
          case DT_DIR : printf("directory or hidden\n"); break;
          case DT_FIFO : printf("a pipe or FIFO\n"); break;
          case DT_SOCK : printf("a local-domain socket\n"); break;
          case DT_CHR : printf("a character device\n"); break;
          case DT_BLK : printf("a block device\n"); break;
          case DT_LNK : printf("a symbolic link\n"); break;