模拟Linux下shell功能,实现简易的minishell

什么是shell

Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它接收用户命令,然后调用相应的应用程序。

编写思路
  1. 捕捉键盘输入的信息。
  2. 解析输入信息:将键盘的输入信息解析成 命令名称+运行参数
  3. 创建子进程:让子进程运行对应名称的程序。(程序替换)
  4. 等待子进程退出。
代码实现
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>

int main ()
{
	while(1)
	{
		//从键盘捕捉输入信息
		printf("[user@host]$");
		fflush(stdout);
		char buf[1024]={0};
		fgets(buf, 1024, stdin);
		
		//获取到键盘输入信息,将buf首地址存入ptr中
		int myargc = 0;
		char *ptr = buf;
		char *myargv = {NULL};
		buf[strlen(buf)-1] = '\0';

		//解析字符串,将一整串字符串解析成 命令名称+运行参数
		while(*ptr != '\0')
		{
			if(*ptr != ' ')
			{
				myargv[myargc] = ptr;
				myargc++;
				while(*ptr != '\0' && *ptr != ' ')
				{
					ptr++;
				}
				*ptr = '\0';
			}
			ptr++;
		}
		myargv[myargc] = NULL;		

		//创建子进程,完成程序替换,让子进程运行我们解析出来的命令
		pid_t pid = fork();
		if (pid < 0)
		{
			perror("fork error")
			continue;
		}
		if (pid == 0)
		{
			execvp(myargv[0], myargv,);
			perror("execvp error");
			exit(-1);
		}

		//父进程等待子进程退出,避免产程僵尸进程
		wait(NULL);
	}
	return 0;
}

在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值