实现一个模拟的shell

0. 相关博客

实现一个管道通信程序_ 一只博客-CSDN博客_实现一个管道通信程序https://blog.csdn.net/qq_42276781/article/details/98523996利用Linux的消息队列通信机制实现两个线程间的通信_ 一只博客-CSDN博客_杭电操作系统实验三https://blog.csdn.net/qq_42276781/article/details/90672038利用Linux的共享内存通信机制实现两个进程间的通信_ 一只博客-CSDN博客_利用linux的共享内存通信机制实现两个进程间的通信https://blog.csdn.net/qq_42276781/article/details/98519201

1. 实现一个模拟的shell

       编写三个不同的程序cmd1.c、cmd2.c及cmd3.c,每个程序的功能自定,分别编译成可执行文件cmd1、cmd2、cmd3.然后再编写一个程序,模拟shell程序的功能:能根据用户输入的字符串(表示相应的命令名),为相应的命令创建子进程并让他去执行相应的程序,而父进程则等待子进程结束,然后再接收下一条命令。如果接收到的命令为exit,则父进程结束,退出模拟shell;如果接收到的命令是无效命令,则显示“Command not found”,继续等待输入下一条命令。

2. 原代码

无bug,可正常运行

3. 图片识别结果

有bug,无法直接运行,调试改bug过程中可以加深代码理解

test1.c文件

#include<unistd.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void childprocess(int num,char * const argv[],char ** environ){
	pid_t pid=fork();
	if(pid<0)
		printf("Create child process failed \n");
	else if(pid==0){
		switch(num){
			case 1:execve("cmd1",argv,environ);
			case 1:execve("cmd2",argv,environ);
			case 1:execve("cmd3",argv,environ);
			default:printf("process will never go here");
		}
	}
}
int main(int argc,char * const argv[], char **environ){
	char a[10];
	while(1){
		fgets(a,10,stdin);
		if (strcmp(a,"exit\n")==0) break;
		else if (strcmp(a,"cmd1\n"==0)){
			childprocess(1,argv,environ);
		}
		else if (strcmp(a,"cmd2\n"==0)){
			childprocess(2,argv,environ);
		}
		else if (strcmp(a,"cmd3\n"==0)){
			childprocess(3,argv,environ);
		}
		else printf("Command not found\n");
	}
} 

cmd1.c、cmd2.c和cmd3.c内容随意,但是要和test1.c放在同一目录下。

4. 代码及实验报告获取

 关注公众号,回复“进程管理”即可获取代码及实验报告

 

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Toblerone_Wind

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值