logo资料库

操作系统课程设计小型命令处理器smallshell.docx

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
操作系统课程设计 课程设计报告 题目: 小型命令处理器 smallshell 所在学院: 信息工程学院 班 学 姓 级: 计科 1201 号: 名: 指导教师: 徐向英 2015 年 1 月 1 日
操作系统课程设计 目录 一、课程设计目标...................................................................... 3 二、课题内容.............................................................................. 3 三、设计思路.............................................................................. 3 四、源代码.................................................................................. 6 五、运行与测试........................................................................ 10 六、心得体会............................................................................ 13 2 / 13
操作系统课程设计 一、课程设计目标 设计并实现一个简单的命令处理程序,名字为 smallshell。要求具备以下基本 功能: 1.支持交互式的用户界面 2.支持内置命令:cd,exit,设置搜索路径 path 等。 3.支持可执行文件的运行 4.支持输入输出重定向功能 5.支持管道功能 二、课题内容 编写一个小型命令处理器 smallshell。 三、设计思路 交互界面 命令解析 可执行文件 内部命令 创建子进程执行 I/O 重定向 创建管道 smallshell 总体结构 1.交互式用户界面 在 smallshell 中,显示如下格式的交互界面: [sername@servername:pathname]$ 2.支持内置命令: exit,设置搜索路径 path 等 如果用户输入内置命令,smallshell 根据命令名及参数进行相应处理。下面 以搜索路径命令和改变路径命令为例,分别说明其实现所涉及的函数。 (1) 搜索路径命令 该命令用于设置搜索路径。可以调用函数 getcwd(b, sizeof(b));,实现对搜索 路径的更新。 int MyPwd()//显示当前目录 3 / 13
操作系统课程设计 { char b[255]; getcwd(b, sizeof(b)); //将当前的工作目录绝对路径复制到参数 b 中所指的 内存空间 cout<>path; if( chdir(path) == 0 ) printf("修改工作路径成功\n"); getcwd(path,_MAX_PATH); printf("当前工作目录:\n%s\n",path); else perror("修改工作路径失败"); return 0; { } { } } 3.支持可执行文件的运行 如果用户输入的不是内置命令,而是一个可执行文件名,则需要在设置的 路径中搜索该命令,并在此环境中执行。可以通过 CreateProcess()函数先对该 命令进行测试: 具体实现的代码如下: int MyExe() //可执行文件 {STARTUPINFO si; memset(&si,0,sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW; PROCESS_INFORMATION pi; 4 / 13
操作系统课程设计 if(!CreateProcess(TEXT(".\\Debug\\1.exe"),NULL,NULL,NULL,FALSE,0,NULL, NULL,&si,&pi)) { cout<<"Create Fail!"<
操作系统课程设计 int output() { FILE *fp; char ch; if((fp=fopen("a.txt","r"))==NULL) { printf("cannot open file\n"); exit(0); } while((ch=fgetc(fp))!=EOF) putchar(ch); printf("\0"); fclose(fp); return 0; } 5.支持管道功能 shell 中的管道功能是将一个命令的输出作为另一个命令的输入。 四、源代码 //在 Windows 下运行 #include #include #include #include #include #include using namespace std; int init()//初始化 { cout<<"* cout<<"* cout<<"* cout<<"* *"<
*"<>path; if( chdir(path) == 0 ) printf("修改工作路径成功\n"); getcwd(path,_MAX_PATH); printf("当前工作目录:\n%s\n",path); else perror("修改工作路径失败"); { } { } return 0; } int MyExe() {STARTUPINFO si; memset(&si,0,sizeof(STARTUPINFO)); //可执行文件 7 / 13
操作系统课程设计 si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW; PROCESS_INFORMATION pi; if(!CreateProcess(TEXT(".\\Debug\\1.exe"),NULL,NULL,NULL,FALSE,0,NULL, NULL,&si,&pi)) { cout<<"Create Fail!"<
分享到:
收藏