目录
1、bash介绍
bash自身fork复制一份,子进程替换一份。
2、命令的分类
①内置命令:cd exit等;
②普通命令: ls pwd cp ps等,通过which可以找到。
bash :复制自身,复制出来一个子进程, 替换ps/ls
3、项目框架
4、项目代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<sys/wait.h>
#define ARG_MAX 10
char *get_cmd(char *buff,char*myargv[])
{
if(buff==NULL||myargv==NULL)
{
return NULL;
}
int i=0;
char*s=strtok(buff," ");
while(s!=NULL)
{
myargv[i++]=s;
s=strtok(NULL," ");
}
return myargv[0];
}
void run_cmd(char*path,char*myargv[])
{
if(path==NULL||myargv==NULL )
{
return;
}
pid_t pid=fork();
if(pid==-1)
{
return;
}
if(pid==0)
{
//ti huan
execvp(path,myargv);
perror("execvp error\n");
exit(0);//子进程必须要退出
}
else
{
wait(NULL);
}
}
int main()
{
while(1)
{
printf("stu@localhost ~$");//默认的
fflush(stdout);
char buff[128]={0};
fgets(buff,128,stdin);
buff[strlen(buff)-1]=0;
char*myargv[ARG_MAX]={0};
char*cmd=get_cmd(buff,myargv);
if(cmd==NULL)
{
continue;
}
else if(strcmp(cmd,"cd")==0)
{
}
else if(strcmp(cmd,"exit")==0)
{
break;
}
else//普通命令
{
//fork+exec;
run_cmd(cmd,myargv);
}
}
exit(0);
}
5、项目运行结果
如有错误,敬请指正。
您的收藏与点赞都是对我最大的鼓励和支持!
本文含有隐藏内容,请 开通VIP 后查看