Sunday, March 11, 2012

Implementing LS command using System calls




Ex. No.: 4(a)(i)
Implementing LS command using System calls


AIM:
            To write a C program to implement the UNIX command ls.

Syntax:
       ls [OPTION]... [FILE]

 
 




Description:

            The ls command is used to list information about the files in the directory mentioned in the command or in the current directory by default.

Algorithm:

1.      Start the program.
2.      Get the command (ls) as the command line arguments and check for the syntax of the command.
3.      Check for the existence of the directory mentioned in the command.
4.      Open the directory if exists.
5.      Print the file names, permissions, and last modified date for the files present in the directory.
6.      Close the directory.

Header Files Description:

sys/stat.h : constants for creating and opening a file(S_IREAD,S_IWRITE,S_IEXEC). Here we use to check the permissions of the files in the directory.

dirent.h  : Includes the structures and functions of directory operations. Here we use the functions opendir(), readdir(), closedir() to open read and close the directories respectively.

time.h  : This header file is used for time conversions and manipulations. Here we use to print the last modified date and time of the files in the directory.

Program:
#include<sys/stat.h>
#include<dirent.h> 
 #include<stdio.h>
#include<time.h>
 main(int argc, char *argv[])
{
   int t=1, done;
   DIR *dir;
   struct dirent *ent;
   if(argc<3)
    {
     printf("The correct syntax is ls dirname\n");
     exit(0);
    }
   if((dir=opendir(argv[2])==NULL))  // To check the existence of the directory
    {
      perror("Unable to open");
      exit(1);
    }
  if(argc==3)
   {
     dir = opendir(argv[2]);
     while((ent = readdir(dir)) !=NULL)
      {
                printf("%s\t",ent->d_name);
             if(1)
             {
                 struct stat sbuf;
                 stat (ent->d_name,&sbuf);
              if(sbuf.st_size==0)   //Check for empty file
                 printf("d");
                        //Find out the permissions for files and directories
              if(sbuf.st_mode & S_IREAD)
                printf("r");
              if(sbuf.st_mode & S_IWRITE)
                printf("w");
              if(sbuf.st_mode & S_IEXEC)
                printf("x");
                  //Print the size
               printf("\t%d",sbuf.st_size);
                        //Print the date and time of last modified
              printf("\t%s\n",ctime(&sbuf.st_ctime));
            }
    }
   close(dir);
  }
  if(argc==2)
  {
    while((ent=readdir(dir)) !=NULL)
      printf("%s\n",ent->d_name);
 }
     return(0);
}
Output
$  ./a.out ls subdir
.       rwx     4096    Wed Nov 16 12:02:29 2005
..      rwx     4096    Wed Nov 16 12:00:54 2005
subfile rwx     4096    Wed Nov 16 12:00:54 2005

RESULT :
            Thus the program to simulate the UNIX command ls was written and executed successfully.

No comments:

Post a Comment