#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<fcntl.h>
#include<stdlib.h>
char command[1024]={0};
char *argv[1024]={0};
int argc=0;
int input()
{
printf("[user@myshell~]$ ");
fflush(stdout);
gets(command);
if(command[0]=='\0')
{
return -1;
}
return 0;
}
void do_strv()
{
memset(argv,0,1024*4);
argc=0;
char *ptr=command;
while(*ptr!='\0')
{
if(!isspace(*ptr))
{
argv[argc++]=ptr;
while((!isspace(*ptr))&&(*ptr!='\0'))
ptr++;
*ptr='\0';
}
ptr++;
}
argv[argc]=NULL;
}
void do_exec()
{
if(strcmp(argv[0],"cd")==0)
{
chdir(argv[1]);
return;
}
pid_t id=fork();
if(id==0)
{
for(int i=0;i<argc;i++)
{
if(strcmp(argv[i],">>")==0)
{
int fd=open(argv[i+1],O_WRONLY|O_APPEND|O_CREAT,00644);
dup2(fd,1);
argv[i]=NULL;
break;
}
else if(strcmp(argv[i],">")==0)
{
int fd=open(argv[i+1],O_WRONLY|O_CREAT,00644);
dup2(fd,1);
argv[i]=NULL;
break;
}
}
execvp(argv[0],argv);
exit(-1);
}
wait(NULL);
}
int main()
{
while(1)
{
if(input()<0)
continue;
do_strv();
do_exec();
}
return 0;
}
Linux中实现一个shell程序
最新推荐文章于 2024-01-25 20:39:11 发布