/linux-mycmd

在Linux环境下模拟实现简单命令解释器

Primary LanguageC++

一、概述

本次课程设计的运行环境是Linux,版本是ubuntu-16.04-LTS,采用的语言是C++,包含的头文件大多是Linux下的C函数库

二、完成情况

完成了课程设计所要求的基本命令实现: pwd //显示当前所在目录的路径名 list <目录名> //列出指定目录名中的所有目录及文件 cd <目录名或路径> //改变当前工作目录 mkdir <目录名> //新建目录 rmdir <目录名> //删除目录 exit //退出命令解释程序 其中,删除目录只能删除空目录,非空目录无法删除,使用list列出文件时,也可以加上路径名 完成了以下两个扩展命令: rename <旧文件名> <新文件名> //重命名一个文件或目录 find <目录> -name <待查找的文件名> //在指定的目录及其子目录中查找指定的文件,并输出查找到的文件的绝对路径

三、详细设计

pwd命令的实现主要是调用getcwd函数,该函数会返回当前文件所在路径 list命令实现的关键函数是opendir和readdir,首先用opendir打开指定目录,然后通过while循环不断readdir获取目录的内容,并存储到dirent结构体变量中,获取该结构体变量的成员d_name就获取到当前目录下所有文件的名字了,获取到的”.”和”..”需要屏蔽掉,最后要调用closedir关闭目录 cd命令的实现主要是对函数chdir的调用,该函数会根据输入的目录名或路径名更改当前路径 mkdir命令实现的主要函数是mkdir,该函数需要接受两个参数,第一个就是文件名,第二个参数我传入的是S_IRWXU,代表该文件所有者拥有读,写和执行操作的权限 rmdir命令的实现主要是调用rmdir函数,该函数传入的一个参数就是文件名,如果删除非空目录会删除失败 rename命令的实现主要是调用rename函数,该函数需要传入两个参数,第一个是文件名,第二个则是你需要修改的新文件名 find命令的实现和list命令的实现有一些类似,关键函数也都是opendir和readdir,首先获取当前文件的stat,然后判断该文件是目录还是普通文件,如果是文件则比较是否是用户需要找的文件,如果是目录的话则调用opendir打开这个目录,然后遍历该目录,递归调用findfile函数,找到用户需要找的文件则输出文件路径,如果不同路径下有相同名字的文件,可以找到多个文件路径。

四、程序运行效果

首先是初始界面:

pwd命令:

list命令:

cd命令:

mkdir命令:

rmdir命令:

rename命令:

find命令:

五、设计总结

一段时间没有使用C语言了,对一些函数以及创建方式有点不清晰了,整个课程设计遇到的问题不是很多,主要是对一些linux C函数的理解与使用。总的来说,整个课程设计还是比较顺利的,因为对linux操作系统接触的不多,所以对一些命令都不是很熟悉,通过此次课程设计,让我对Linux操作系统有了强烈的兴趣,虽然只是在虚拟机里操作linux系统,但linux界面给人一种很清爽的感觉,发现linux确实非常简洁好用。历时两天的时间把程序设计出来,通过一段时间的学习,自己的编程能力确实变强了一些