这个程序主要用到的知识点是 exec + fork
主要思路:
1.键盘输入存放在buff[] 中
2.使用strtok函数将 buff 中的数据以空格为分割符将 buff 分割存放于 myargv 中
3.判断 myargv[0] 是不是为空或者 exit;为空不做任何操作,exit结束进程
4.myargv[0] 不为空或者 exit , 使用 fork 创建出一个子进程,使用 exec 替换进程执行输入的操作
代码展示:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<unistd.h>
#include<string.h>
int main(int argc, char* argv[], char* envp[])
{
while( 1 )
{
printf("stu@stu-pc :~/c210/pratice$ ");
fflush(stdout);//强制刷新缓冲区
char buff[128] = {0};//存放命令,ls,ps -f
fgets(buff,128,stdin);
buff[strlen(buff) - 1] = 0;//"ls\n" -> "ls"
char* myargv[10] = {0};
char* s = strtok(buff," ");//分割字符串
int i = 0;
while(s != NULL)
{
myargv[i++] = s;
s = strtok(NULL," ");
}
char* cmd = myargv[0];
if(cmd == NULL)
{
continue;
}
if( strcmp(cmd,"exit") == 0)
{
exit(0);
}
if(buff[0] == 0)
{
continue;
}
pid_t pid = fork();
if(pid == -1)
{
continue;
}
if(pid == 0)
{
execvp(cmd,myargv);
perror("execlp error\n");
exit(0);
}
wait(NULL);
}
}
运行程序: