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