操作系统shell命令解析器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.程序概述

1.完成的任务

在Linux环境下编写一个简单的命令解释器即定义一个命令使它具有Linux中某些

命令的功能,可以实现获取用户输入的指令、可解析指令、可执行命令等功能,以

此来熟悉Linux编程环境,加强对Linux命令的理解及函数的运用。

2.遇到的困难及解决的问题

在程序设计过程中,遇到的困难主要有以下几个:一、系统函数调用问题;二、对

文件的操作;三、复制文件。

通过查阅Linux c函数库后,知道了如何调用系统函数,并解决了对文件的操作;而

文件的复制,则采用了如下思想:打开一个输入文件,创建一个输出文件,建立一

个BUF大小的缓冲区;然后在判断输入文件未完的循环中,每次读入多少就向输出

文件中写入多少,直到输入文件结束。

二.概念原理

1.基本概念

为用户提供了输入命令和参数,以此向Linux内核发送请求以便运行程序的界面系

统级程序。下图为Linux、UNIX系统层次结构图:

2.原理

解释用户输入的命令行,提交到系统内核处理,并将结果返回给用户。

三.详细设计

1.总体设计

运行程序后,首先初始化,显示系统有的命令,然后通过用while(1)循环,连续的

获取用户输入的命令,一直到用户输入quit退出循环,接着程序结束。

2.主要函数及功能

2.1 int init()

显示系统命令等信息。

int init()//初始化

{

cout<<"*****************欢迎使用GPLinux*********************"<

cout<<"* 系统命令 *"<

cout<<"* 1.quit 退出! *"<

cout<<"* 2.mypwd 显示当前目录! *"<

cout<<"* 3.mycdir 创建新目录! *"<

cout<<"* 4.mydir 显示文件! *"<

cout<<"* 5.mycd 改变路径! *"<

cout<<"* 6.mydel 删除文件! *"<

cout<<"* 7.mydeldir 删除目录! *"<

cout<<"* 8.mycp 复制文件! *"<

cout<<"*****************************************************"<

return 0;

}

2.2 int MyPwd()

用于显示当前目录。

int MyPwd()//显示当前目录

{

char b[255];

getcwd(b, sizeof(b)); //将当前的工作目录绝对路径复制到参数b中所指的内存空间

cout<

return 0;

}

2.3 int MyCDir()

用于创建新目录。

int MyCDir()//创建新目录

{

if(strcmp("", param_list[1]) == 0)

{

cout<<"出错!请输入参数!"<

return -1;

}

if(mkdir(param_list[1], ~0) == -1) //判断创建目录是否成功,并且可以修改权限

{

cout<<"创建目录失败!"<

return -1;

}

else

{

cout<<"创建目录成功!"<

}

return 0;

}

2.4 int fn(const char * file, const struct stat * sb, int flag)和int MyDir() 用于从指定的目录开始,往下一层层地递归式遍历子目录和文件,然后输出到界面。

int fn(const char * file, const struct stat * sb, int flag) //第一参数指向当时所在的目录路径,第二参数为stat结构指针,第三个参数为旗标

{

if(flag == FTW_D) //FTW_D为目录

{

cout<

}

if(flag == FTW_F) //FTW_F为一般文件

{

cout<

}

return 0;

}

int MyDir()//显示目录和文件

{

ftw("/home/", fn, 500); //第一个参数为指定的开始目录,第二个参数为fn函数,第三个参数为进行遍历目录时可同时打开的文件数

}

2.5 int MyCd()

用于改变路径。

int MyCd()//改变路径

{

if(strcmp("", param_list[1]) == 0)

{

cout<<"出错!请输入路径!"<

return -1;

}

if(chdir(param_list[1]) == -1) //判断要改变的路径存不存在

{

cout<<"目录不存在!"<

return -1;

}

return 0;

}

2.6 int MyDel()

用于删除文件。

int MyDel()//删除文件

{

if(strcmp("", param_list[1]) == 0)

{

cout<<"出错!请输入文件要删除的文件名!"<

相关文档
最新文档