实验一 命令解释程序设计

一、实验目的

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)命令前后有空格示为合法命令。

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

流程图:

  

 

                                 

四、结果分析

        从运行结果可以看出,当输入dir命令后,运行,它会显示当前目录下的所有文件,当输入的命令缺少操作数时,它会提示缺少操作数这样的信息,输入命令disp xx,就会显示xx,当想退出的时候,输入exit,它提示命令错误,必须要输入它已定义的命令。通过这次实验,我对命令行解释程序有了不少了解。

五、源程序

#include<stdio.h>

#include<string.h>

#include<stdlib.h>



//去除首部空格

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 tem[80];

    char str3[80]={0};

    char *cmd;

    char *scwt[] = {"dir","cop" ,"era" ,"disp" ,"end"};

    char *scwt2[] = { "dir","cp", "rm" ,"echo","end" };

    static int cmdnum = 5;

    int j;

    while(1){

        printf( "Please input command:",scwt);

        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;

            }

            printf("Bad command\n");

        }

    }

    return 0;

}



  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值