利用c语言编写一个微型命令解释程序,接收并解释以下命令,操作系统命令解释.doc...

PAGE

word文档可自由复制编辑

word文档可自由复制编辑

苏州科技学院

电子信息实验中心

实验报告

课  程

操作系统

学  号姓  名

闫自立

班  级

软件1311

专  业

计算机科学与技术

指导教师

张妮

学年 / 学期

2015 ~2016学年第一学期

实验一 命令解释程序设计

实验项目性质:设计性计划学时:2

实 验 环 境:Redhat Linux 实验日期:2015   年  10月  16日

一、实验目的

1、通过本实验熟悉UNIX/LINUX操作系统及C语言。

2、熟悉系统调用的编程方法。

二、实验内容

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

(1) dir列出当前目录

(2) copfile1file2拷贝文件

(3)erafilename删除文件

(4) disp string显示字符串

(5)end结束,退出

要求:

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

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

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

四、结果分析(可根据需要附加页)

dir命令

cop命令

3.era命令

disp命令

end命令

五、源程序(可根据需要附加页)

#include

#include

#include

#include

using namespace std;

int main()

{

char cmdl[80];

char lin[80];//linux最终命令

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

static int cmdnum = 5;//可用的命令数

char cmd[80];

char *parameter;

unsigned int j,n;

while (true)

{

cout << "notice:command must have space in the end!\n";

printf("Please input command: ");

fgets(cmdl,30,stdin);//从标准输入读取数据 包括键盘

n = strcspn(cmdl, " ");//取命令命令部分

if (n>0 || strlen(cmdl)>0)

{

strncpy(cmd, cmdl, n);//将命令部分拷贝的cmd字符数组

cmd[n] = '\0';

for (j = 0; j

if (strcmp(cmd, scwt[j]) == 0)

break;

if (j == 0){//是dir命令?

cout << "dir最终解释后的命令是:" <

system("ls -a");

}

else if (j == 1){//cop

parameter=strstr(cmdl, " ");

char *tem = "cp ";

unsigned int i = 0;

unsigned int j1 = 0;

for (; i < strlen(tem); i++){

lin[i] = *(tem + i);

}

for (; i < strlen(tem) + strlen(parameter); i++){

lin[i] = *(parameter + j1);

j1++;

}

lin[strlen(tem) + strlen(parameter)] = '\0';

cout<

system(lin);

continue;

}

else if (j == 2){//era 删除

parameter = strstr(cmdl, " ");

char *tem = "rm -f ";

unsigned int i = 0;

unsigned int j1 = 0;

for (; i < strlen(tem); i++){

lin[i] = *(tem

你可能感兴趣的:(接收并解释以下命令)