Ex. No.: 4(a)(i)
|
Implementing LS command using System
calls
|
AIM:
To write a C program to
implement the UNIX command ls.
Syntax:
|
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