Saturday, August 6, 2011

SIMULATION OF COMMANDS

cat COMMAND:-


#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
int main(int argc,char *argv[])
{
int i,fd,fd1,r;
char buf[50];
if(argc<2)
{
printf("mycat:Too few arguments!**!");
return 0;
}
else if(argc>2)
{
if(!strcmp(argv[1],">"))
{
fd=creat(argv[2],00777);
while((r=read(0,buf,50))>0)
write(fd,buf,r);
return 0;
}
else if(!strcmp(argv[2],">"))
{
fd=open(argv[1],0,00777);
if(fd==-1)
{
printf("mycat:%s:No such file or directory!**!\n",argv[1]);
return 0;
}
fd1=creat(argv[3],00777);
while((r=read(fd,buf,50))>0)
write(fd1,buf,r);
return 0;
}
else if(!strcmp(argv[2],">>"))
{
fd=open(argv[1],O_RDWR);
fd1=open(argv[3],O_RDWR|O_APPEND);
if(fd==-1)
{
printf("error");
return 1;
}
if(fd1==-1)
fd=creat(argv[3],00777);
while((r=read(fd,buf,50))>0)
write(fd1,buf,r);
return 0;
}
else
{
for(i=1;i<argc;i++)
{
fd=open(argv[i],O_RDWR);
if(fd==-1)
printf("mycat:%s:No such file or directory!**!\n",argv[i]);
else
while((r=read(fd,buf,50))>0)
write(1,buf,r);
}
}
}
else
{
fd=open(argv[1],0,O_RDWR);
if(fd==-1)
printf("mycat:%s:No such file or directory!**!\n",argv[1]);
else
while((r=read(fd,buf,50))>0)
write(1,buf,r);
}
return 0;
}
cp COMMAND:-

#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<string.h>
#include<fcntl.h>
int main(int argc,char *argv[])
{
int fd,fd1,r;
char buf[50],c;
switch(argc)
{
case 1:
printf("Error:No arguments!**!");
return 1;
case 2:
printf("Error:Too few arguments for mycp command!**!");
return 1;
case 3:
if(strcmp(argv[1],"-i")==0)
{
printf("Error: Too few arguments for mycp command!**!");
return 1;
}
fd=open(argv[1],0,00777);
if(fd==-1)
{
printf("Error:No source file!**!");
return 1;
}
fd1=creat(argv[2],00777);
while((r=read(fd,buf,1))>0)
write(fd1,buf,1);
break;
case 4:
if(strcmp(argv[1],"-i")==0)
{
fd=open(argv[2],0,00777);
if(fd==-1)
{
printf("Error:No source file!**!");
return 1;
}
fd1=open(argv[3],0,00777);
if(fd1>0)
{
printf("mycp: overwrite '%s' (y/n)....: ",argv[3]);
scanf("%c",&c);
if(c=='y')
{
fd1=creat(argv[3],00777);
while((r=read(fd,buf,1))>0)
write(fd1,buf,1);
}
}
else if(fd1==-1)
{
fd1=creat(argv[3],00777);
while((r=read(fd,buf,1))>0)
write(fd1,buf,1);
}
}
break;
default:
printf("Error:Excess arguments supplied!**!");
break;
}
return 0;
}
grep COMMAND:-


#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
int count,lno;
int mysubstr(char key[],char main[])
{
int rem,k,i;
for(i=0;i<strlen(main);i++)
{
if(key[0]==main[i])
{
rem=i;k=0;
while(key[k++]==main[rem++])
if(k==strlen(key))
return 1;
}
}
return 0;
}
int gotoloop(char file[],char line[],char pattern[],char buf[],int fd,int type)
{
int i=0;
do
{
if(buf[0]=='\n')
break;
line[i++]=buf[0];
}while(read(fd,buf,1)>0);
line[i]='\0';lno++;
if(mysubstr(pattern,line))
{
switch(type)
{
case 3: printf("%s\n",line);break;
case 41:count++;break;
case 42:printf("%d:%s\n",lno,line);break;
case 44:printf("%s:%s\n",file,line);break;
}
}
else
if(type==43)
printf("%s\n",line);
if(read(fd,buf,1)>0)
return 1;
return 0;
}
int main(int argc,char * argv[])
{
int fd,i;
char buf[1],pattern[50],line[1000];
switch(argc)
{
case 1:
case 2:
printf("Error: Too few arguments!**!\n");
break;
case 3:
strcpy(pattern,argv[1]);
fd=open(argv[2],O_RDWR);
if(fd==-1)
{
printf("Error:%s file not found!**!\n",argv[2]);
return 0;
}
read(fd,buf,1); //reading a char to buffer for initialising buffer to 1st value
while(gotoloop(argv[2],line,pattern,buf,fd,3));
break;
case 4:
default:
if(!strcmp(argv[1],"-c"))
{
for(i=3;i<argc;i++)
{
strcpy(pattern,argv[2]);
fd=open(argv[i],O_RDWR);
if(fd==-1)
{
printf("Error:%s does not exist!**!",argv[3]);
break;
}
count=0;read(fd,buf,1); //initializing count <- 0 for many testing and reading a char to buffer for init
while(gotoloop(argv[i],line,pattern,buf,fd,41));
printf("%d\n",count);
}
}
else if(!strcmp(argv[1],"-v"))
{
for(i=3;i<argc;i++)
{
strcpy(pattern,argv[2]);
fd=open(argv[i],O_RDWR);
if(fd==-1)
{
printf("Error:%s does not exist!**!",argv[3]);
break;
}
count=0;read(fd,buf,1); //reading a char to buffer for initialising buffer to 1st value
while(gotoloop(argv[i],line,pattern,buf,fd,43));
}
}
else if(!strcmp(argv[1],"-n"))
{
for(i=3;i<argc;i++)
{
strcpy(pattern,argv[2]);
fd=open(argv[i],O_RDWR);
if(fd==-1)
{
printf("Error:%s does not exist!**!",argv[3]);
break;
}
read(fd,buf,1);lno=0; //initializing line no. <- 0 for many testing and reading a char to buffer for init
while(gotoloop(argv[i],line,pattern,buf,fd,42));
}
}
else
{
strcpy(pattern,argv[1]);
for(i=2;i<argc;i++)
{
fd=open(argv[i],O_RDWR);
if(fd==-1)
{
printf("Error:%s does not exist!**!",argv[i]);
continue;
}
read(fd,buf,1);
while(gotoloop(argv[i],line,pattern,buf,fd,44));
}
}
break;
}
return 0;
}
ls COMMAND:-


#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>
#include<dirent.h>
#include<stdlib.h>
#include<ustat.h>
#include<time.h>
#include<grp.h>
#include<pwd.h>
void display(char fullpath[],int flag)
{
DIR * d;
struct dirent * con;
d=opendir(fullpath);
while((con=readdir(d))!=NULL)
if(strcmp(con->d_name,".")!=0 && strcmp(con->d_name,"..")!=0)
{
if(flag==0)
printf("%s\t",con->d_name);
else printf("%s\n",con->d_name);
}
}
void longlisting()
{
DIR *d;
struct dirent * con;
struct stat details;
struct group *gr;
struct passwd *pw;
struct tm *t;
char buf[100];
t=(struct tm*)malloc(sizeof(struct tm));
d=opendir(".");
while((con=readdir(d))!=NULL)
if(strcmp(con->d_name,".")!=0 && strcmp(con->d_name,"..")!=0)
{
stat(con->d_name,&details);
gr=getgrgid(details.st_gid);
pw=getpwuid(details.st_uid);
t=localtime(&details.st_ctime);
strftime(buf,sizeof(buf),"%B %e %T",t);
if(S_ISDIR(details.st_mode))
printf("d");
else printf("-");
if((details.st_mode & S_IRUSR)!=0)
printf("r");
else printf("-");
if((details.st_mode & S_IWUSR)!=0)
printf("w");
else printf("-");
if((details.st_mode & S_IXUSR)!=0)
printf("x");
else printf("-");
if((details.st_mode & S_IRGRP)!=0)
printf("r");
else printf("-");
if((details.st_mode & S_IWGRP)!=0)
printf("w");
else printf("-");
if((details.st_mode & S_IXGRP)!=0)
printf("x");
else printf("-");
if((details.st_mode & S_IROTH)!=0)
printf("r");
else printf("-");
if((details.st_mode & S_IWOTH)!=0)
printf("w");
else printf("-");
if((details.st_mode & S_IXOTH)!=0)
printf("x");
else printf("-");
printf("%2d",details.st_nlink);
printf("%10s",pw->pw_name);
printf("%10s",gr->gr_name);
printf("  %s ",buf);
printf("%13s",con->d_name);
printf("\n");
}
}
int main(int argc,char * argv[])
{
DIR * d,*d1;
struct dirent *con;
int i,flag;
char path[100];
switch(argc)
{
case 1:
display(".",0);
break;
default:
if(!strcmp(argv[1],"-1"))
display(".",1);
else if(!strcmp(argv[1],"-R"))
{
printf("./:\n");
display(".",0);
d=opendir(".");
while((con=readdir(d))!=NULL)
if(strcmp(con->d_name,".")!=0 && strcmp(con->d_name,"..")!=0 && (d1=opendir(con->d_name))!=NULL)
{
strcpy(path,"./");
strcat(path,con->d_name);
printf("\n\n%s:\n",path);
display(path,0);
}
}
else if(!strcmp(argv[1],"-l"))
{
longlisting();
}
else
{
for(i=1;i<argc;i++)
{
d=opendir(".");
flag=0;
while(1)
{
if((con=readdir(d))==NULL)
break;
if(strcmp(con->d_name,argv[i])==0)
{
printf("%s\t",con->d_name);
flag=1;
}
}
if(!flag)
printf("\nmyls: cannot access %s: No such file or directory",argv[i]);
}
}
}
printf("\n");
return 0;
}



No comments:

Post a Comment