C语言实现一个Linux环境下的shell
一.实现一个shell的流程
1.捕捉键盘输入
将输入的命令和参数存储到一个数组中
2.解析命令
将输入的命令和参数分解成一个个独立的部分
3.创建子进程
因为shell是一个可以一直运行的程序,所以不能运行之后就退出,如果创建一个子进程,在子进程执行操作,子进程执行完毕后退出也不会对父进程造成影响,所以程序可以一直运行
4.在子进程中进行进程替换
将要完成的任务交给子进程
5.父进程等待子进程退出
防止产生僵尸进程
二.源码
#include <stdio.h>
#include <string.h>
#include <unistd.h> //fork
#include <sys/types.h>
#include <sys/stat.h> //umask
#include <sys/wait.h> //wait
#include <fcntl.h>
#define MAX_ARGU_SZ 1024 //最大参数大小
char arguments[MAX_ARGU_SZ]; //参数数组
int main(int argc, char* argv[])
{
while(1)
{
//将参数数组全部清空
memset(arguments, 0, MAX_ARGU_SZ);
//1.获取键盘输入
printf("[user:host /]:$ ");
//手动刷新文件缓冲区
fflush(stdout);
//获取一行输入
fgets(arguments, MAX_ARGU_SZ - 1