欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年操作系统shell命令解析器 .pdf

    • 资源ID:33371406       资源大小:764.05KB        全文页数:11页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年操作系统shell命令解析器 .pdf

    一程序概述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*endl; cout * 系统命令 *endl; cout * 1.quit 退出! *endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - cout * 2.mypwd 显示当前目录! *endl; cout * 3.mycdir 创建新目录! *endl; cout * 4.mydir 显示文件! *endl; cout * 5.mycd 改变路径! *endl; cout * 6.mydel 删除文件! *endl; cout * 7.mydeldir 删除目录! *endl; cout * 8.mycp 复制文件! *endl; cout *endl; return 0; 2.2 int MyPwd() 用于显示当前目录。int MyPwd() / 显示当前目录 char b255; getcwd(b, sizeof (b); /将当前的工作目录绝对路径复制到参数b中所指的内存空间coutbendl; return 0; 2.3 int MyCDir() 用于创建新目录。int MyCDir() / 创建新目录 if (strcmp( , param_list1) = 0) cout 出错!请输入参数! endl; return -1; if (mkdir(param_list1, 0) = -1) / 判断创建目录是否成功,并且可以修改权限 cout 创建目录失败!endl; return -1; else cout 创建目录成功!endl; return 0; 2.4 int fn(const char * file, const struct stat * sb, int flag) 和 int MyDir() 用于从指定的目录开始,往下一层层地递归式遍历子目录和文件,然后输出到界面。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - int fn( constchar * file, conststruct stat * sb, int flag) / 第一参数指向当时所在的目录路径,第二参数为stat 结构指针,第三个参数为旗标 if (flag = FTW_D) /FTW_D为目录 coutfile- 目录 endl; if (flag = FTW_F) /FTW_F 为一般文件 coutfile- 文件 endl; return 0; int MyDir()/ 显示目录和文件 ftw( /home/ , fn, 500); /第一个参数为指定的开始目录,第二个参数为fn 函数,第三个参数为进行遍历目录时可同时打开的文件数 2.5 int MyCd() 用于改变路径。int MyCd() / 改变路径 if (strcmp( , param_list1) = 0) cout 出错!请输入路径!endl; return -1; if (chdir(param_list1) = -1) / 判断要改变的路径存不存在 cout 目录不存在! endl; return -1; return 0; 2.6 int MyDel() 用于删除文件。int MyDel() / 删除文件 if (strcmp( , param_list1) = 0) cout 出错!请输入文件要删除的文件名!endl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - return -1; if (unlink(param_list1) = -1) /判断文件删除是否成功 cout 文件删除失败! endl; return -1; else cout 文件删除成功! endl; return 0; 2.7 int MyDelDir() 用于删除文件夹。int MyDelDir()/ 删除文件夹 if (strcmp( , param_list1) = 0) cout 出错!请输入要删除的目录!endl; return -1; if (rmdir(param_list1) = -1) / 判断目录删除是否成功 cout 目录删除失败! endl; return -1; else cout 目录删除成功! endl; return 0; 2.8 void out(char * s1, char * s2)和int MyCp() 用于复制文件,其中BUF 用来表示缓冲区大小,CM 用来定义创建文件的权限。void out( char *s1, char *s2) / 输出错误信息 coutstderrError:s1; perror(s2); coutendl; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - int MyCp() / 复制文件 int in_fd, out_fd, n_chars; /in_fd为输入文件描述符,out_fd 为输出文件描述符,n_chars 用于存放读出的字节数char bfBUF; / 缓冲区大小if ( , param_list1) = 0) cout 出错!请输入参数! 0) if (write(out_fd, bf, n_chars) != n_chars) out( 写入出错! , param_list2); if (n_chars = -1) out( 读取失败! , param_list1); if (close(in_fd) = -1 | close(out_fd) = -1) out( 关闭文件失败!, ); 2.9 int getCmd() 用于命令的读取。int getCmd() / 命令的读取 char a; int j = 0; while (scanf(%c,&a) != EOF & a != n & j 256) /scanf(%c,&a)为在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - csj=a; j+; csj=0; return 0; 2.10 int PC() 用户命令的解析。int PC() / 命令的解析 unsignedint i = 0, j = 0, n = 0; int bf = 1; /分割符标志,表示有分割符,表示没有分割符for (i = 0; i strlen(cs); i+) if (csi = | csi = t) if (bf = 0) param_listnj = 0; n+; j = 0; bf = 1; else param_listnj = csi; j+; bf = 0; if (bf = 1) param_listn0 = 0; /标识 param_list的结束 else param_listnj = 0; n+; param_listn0 = 0; return 1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - 2.11 int ZC() 用于命令的执行。int ZC() / 命令的执行 if (strcmp( quit, param_list0) = 0)/ 退出 return -1; if (strcmp( mypwd, param_list0) = 0)/ 显示当前目录 MyPwd(); return 0; if (strcmp( mycdir, param_list0) = 0)/ 创建新目录 MyCDir(); return 0; if (strcmp( mydir , param_list0) = 0)/ 显示文件 MyDir(); return 0; if (strcmp( mycd , param_list0) = 0)/ 改变路径 MyCd(); return 0; if (strcmp( mydel , param_list0) = 0)/ 删除文件 MyDel(); return 0; if (strcmp( mydeldir, param_list0) = 0)/ 删除目录 MyDelDir(); return 0; if (strcmp( mycp , param_list0) = 0)/ 复制文件 MyCp(); return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - return 0; 2.12 int main(int argc, char * argv) 主函数,通过 while(1)循环可以不断的输入命令。int main( int argc, char * argv) init(); while (1) coutGPLinux$ ; getCmd(); PC(); if (ZC() = -1) break ; return 0; 四完成情况实现了列出文件、改变路径、复制文件、删除目录和示当前目录名的课程要求功能,并且还实现了删除文件和创建新目录功能。五使用情况1.启动程序后,如下图所示:(可以看到系统有的命令和其用途)2.mypwd命令(无参数)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - 3.mycdir 命令命令格式为: mycdir 目录名4.mydir 命令 ( 无参数 ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - 5.mycd命令命令格式为: mycd 目录名6.mydel 命令命令格式为: mydel 文件名7.mydeldir命令命令格式为: mydeldir 目录名名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 8.mycp命令命令格式为: mycp 源文件目的文件9.quit命令(无参数)六设计总结1.经验教训通过本次课程设计,发现了自己很多的不足之处,比如对学过的知识还不能深刻的理解,而且还不能牢固的掌握。发现在程序设计中,可以使用系统自带的函数,这样可以节省时间和提高程序的稳定性。2.实践感受虽然在这次程序的设计过程中经历了很多的困难,但同时也学到了很多新的知识,如使我对 Linux 系统中的 shell 的运行机制有了进一步的了解;还重温了以前学过的知识。总的来说,每一次的课程设计都是让我们学到的知识进一步的加强,并且学会如何在遇到问题时,通过分析问题,到最后解决问题的思路。七参考文献Linux C 函数库参考手册鸟哥的 Linux 私房菜:基础学习篇(第二版 ) Linux 操作系统下C 语言编程入门名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -

    注意事项

    本文(2022年操作系统shell命令解析器 .pdf)为本站会员(H****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开