1.创建两个数组,第一个数组储存输入的全部指令,比如ls -a -l
char my_command[100];
char* break_command[20];
2.模仿真实shell打印在屏幕上一行指令,这里注意不要使用'n'清空缓存,应为这样会使得输入命令后屏幕显示空行,最好使用fflush(stdout)。
3.将输入的完整指令放入到之前创建的第一个数组内,之后再将完整指令用strtok函数拆分成一个个小指令。
4.当输入指令为cd的时候,因为我们要调整的是当前进程的路径,所以需要单独运行该指令。
5.其他非cd指令,只需要正常利用fork()调用子进程,对命令进行读取即可
6.最后别忘了用waitpid函数回收子进程
7.大功告成,全部代码如下
#include
#include
#include
#include
int main()
{
char my_command[100];
char* break_command[20];
while(1)
{
printf("欢迎使用灵灵shell$:");
fflush(stdout);
fgets(my_command,99,stdin);
my_command[strlen(my_command)-1]=' ';
break_command[0]=strtok(my_command," ");
int index=1;
while(1)
{
break_command[index]=strtok(NULL," ");
if(break_command[index]==NULL)
{
break;
}
index++;
}
if(strcmp(break_command[0],"cd")==0)
{
chdir(break_command[1]);
continue;
}
if(fork()==0)
{
execvp(break_command[0],break_command);
exit(0);
}
int status=0;
waitpid(-1,&status,0);
}
return 0;
}



