Homework Four
lstree

The purpose of this assignment is to learn some basics of how Linux stores file and directory information.

Submit your source code via email attachment to dannellys@winthrop.edu with the subject line CSCI325 - HW 04 by 2:00pm on February 22.


The Problem

For example, assuming the current directory has three entries - two files and a directory named testdir - and testdir has one file named bob:

   > lstree . 2
   myls1.c
   myls2.c
   testdir
      bob


Helpful Code

Here is the myls2 program that we discussed in class.

/*******************************************
myls2 - Print a director with inode numbers
        and mark directories
Dannelly - February 2011
********************************************/

#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
   DIR *dp;                // ptr to directory
   struct dirent *dirp;    // prt to next dir entry
   struct stat stat_info;  // file status information

   /***** check for correct command line  *****/
   if (argc != 2)
     {
      printf ("must provide a directory name\n");
      exit (1);
     }

   /***** can that directory really be opened???  *****/
   if ( ( dp = opendir(argv[1])) == NULL)
     {
      printf ("cannot open %s\n",argv[1]);
      exit (1);
     }

   /*****  process all directory entries  *****/
   while ( ( dirp = readdir(dp)) != NULL)
     {
      printf ( "%20s %d", dirp->d_name,dirp->d_ino);
      stat (dirp->d_name, &stat_info);
      if (S_ISDIR(stat_info.st_mode))  // if directory
         printf ("  directory\n");     //   label it
      else
         printf ("\n");                // else print nothing else
     }

   /*****  done  *****/
   closedir (dp);
}