这里我们可以看到,运行我们模拟实现的简易的shell之后可以像正常使用一样,在命令行上输入各种命令,来实现我们需要的功能。
shell原理
一个shell的运行大概需要分为如下几个阶段:
- 获取命令行
- 解析命令行
- 建立一个子进程(fork)
- 替换子进程(execvp)
- 父进程等待子进程退出(wait)
根据这些阶段,结合之前所学的进程相关知识,我们用代码来实现一个简易的shell。
打印提示符
我们在使用Linux时候会看到在命令行上会有这样的提示符,我们在实现的过程中也需要加上这样的提示符,实现代码如下:
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<string.h>
#define NUM 128
#define CMD_NUM 128
int main()
{
char command[NUM];
for(; ;)
{
char *argv[CMD_NUM] = {
NULL };
//1、打印提示符
command[0]=0;//用这种方式,可以做到o(1)的时间复杂度,清空字符串
printf("[hyx@VM-16-12-centos minishell]# ");
fflush(stdout);
return 0;