操作系统--实验一.命令解释程序

操作系统实验一、命令解释程序

一、实验目的

​ 1、探索、理解并掌握操作系统命令解释器的设计原理和实现机,基于 Linux 内核进行相应命令解释程序的设计和实现;

​ 2、通过本实验掌握Linux 操作系统平台及GCC编译器的编译、调试方法;

​ 3、掌握虚拟机平台的使用、管理。

二、实验内容

​ 利用C语言编写一个微型命令解释程序minishell.c,该程序可接收并解释以下命令:

​ (1) dir 列出当前目录

​ (2) cop file1 file2 拷贝文件

​ (3) era filename 删除文件

​ (4) disp string 显示字符串

​ (5) end 结束,退出

要求:

​ (1)检查命令的合法性,如果有错误,显示出错信息,等待重新输入;

​ (2)命令前后有空格示为合法命令。

三、设计原理(或方案)及相关算法

​ 首先检查从键盘获取的命令前后是否有空格,若有空格的话除去首尾部空格,然后再和内部命令相比较,若相同,则调用system()函数执行命令;若不同,则调用execl()函数执行外部命令。

四、结果分析

image-20211114192224028

五、源程序

# include<stdio.h>
# include<string.h>
# include<stdlib.h>
# define true 1
# define false 0
//去除首部空格
void trim(char * cmd1,char * tem){
    int m=0;
    while (cmd1[m]==' ')
        m++;
    strncpy(tem,cmd1+m,strlen(cmd1)-m);
    tem[strlen(cmd1)-m] = '\0';
}

int main()
{
	char cmd1[80];
	char str2[80];
	char str3[80]={0};
	char tem[80];
	char *cmd;
	char *scwt[]={"dir","cop","era","disp","end"};
	char *scwt2[]={"dir","cp","rm","echo","end"};
	static int cmdnum=5;
	int j;
	while(true)
	{
		printf("请输入指令:");
		gets(cmd1);
		trim(cmd1,tem);
		int n=strcspn(tem," ");
		if(n>0||strlen(tem)>0)
		{
			strncpy(str2,tem,n);
			str2[n]='\0';
			cmd=str2;
			for(j=0;j<cmdnum;j++)
			if(strcmp(cmd,scwt[j])==0)
                   	 break;
			if(j==4)
				exit(0);
			if(j<cmdnum)//拼接字符串
			{
				sprintf(str3,"%s%s",scwt2[j],tem+n);
				system(str3);
				continue;
			}
			else
			{
				if(fork()==0){
					execl("/bin/sh","sh","-c",tem,(char*)0);
					//perror(cmd);
				}
				wait(0);
			}
			
		}
	}
	return 0;
}
  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值