版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最新基于linux操作系统的ls命令的开发和扩展-毕业名师资料合集目录摘要 1Abstract 2前言 3第1章绪论 51.1扩展开发Ls的意义 51.2shell命令与Linux系统的关系 51.3Linux系统简介 51.4开发和运行环境 61.5开发和运行环境 6第2章需求分析 72.1系统目的 72.2需求分析方法 72.3系统功能需求分析 8第3章系统设计 93.1系统总体设计 9系统体系结构设计原理 9应用设计背景 93.2系统设计流程 10程序整体框架流程 10函数处理思想 113.3系统概述 12系统应用的意义 12系统功能设计 12第4章系统详细设计实现 134.1系统主模块 134.2display_dir模块 144.3display模块 174.4信息报错模块 184.5display-attribute模块 194.6display_name模块 214.7排序模块 224.8文件大小显示方式模块 244.9文本文件指定字符串查找模块 244.10特色帮助命令模块 27第5章系统测试运行 295.1测试目的 295.2测试方案 295.3测试项目 29基本功能整体测试 29参数测试 30参数组合测试 32我的特色排序测试 34我的特色查找测试 36我的特色帮助显示测试 365.4系统运行测试与维护 37系统运行测试 37系统维护 37参考文献 39后记 40附录 402摘要随着社会和经济的迅猛发展,计算机成为了人们必不可少的伙伴。在Internet飞速发展的今天,各个行业都在进行着信息化与网络化的转变,信息的安全性更显得尤为重要。Linux操作系统拥有极高的稳定性,在当前的科学技术领域中,更能展现它特有的优越性。基于Linux操作系统的Ls命令的开发和扩展更是一个至关重要的课题。论文主要说明了本课题的研发,及研究过程中所涉及到的问题,系统要实现的功能和性能要求。主要介绍了该项目的设计思想,设计过程中存在的技术问题及相应的解决办法。基于Linux操作系统开发了Ls命令的基本功能,并在此基础上做了一定的扩展。该系统可以满足用户查询任意目录的文件及文件属性等众多重要信息。本课题实现了原有Ls命令的参数及其参数组合。例如:-a,-l,-al等等。并在此基础上做了三大特色的功能扩展。我的特色一,对文件的排序。我的特色二,对任意文本文件中任意字符串的查找。我的特色三,人性化的帮助界面。关词:Linux操作系统;Ls命令;文件;查询AbstractAlongwiththedevelopmentofthesocietyandtheglobaleconomy,computersciencehasbecomeanindispensablepartinmodernlife.WiththequickdevelopmentofInternet,allkindsofbusinessesarechangingforinformationandnetwork.Sothesecurityofinformationseemsespeciallyimportant.TheLinuxoperatingsystemhashighstability,anditcanshowmoreofitsownuniquecharacteristicsinthecurrentfieldofscienceandtechnology.ThedevelopmentandexpansionoftheLscommandwhichbasedontheLinuxoperationsystemisacrucialproject.Thethesismainlyexplainsthistopictheresearch,andinvolvedtheproblemsintheresearchprocess,thefunctionalandperformancerequirementsrealizedbythesystemItfocusesonthesystemdesign,theideasaboutthedesign,thedifficulttechnologicproblems,andthesolutionsofthoseproblems.BasedontheLinuxoperationsystemdevelopedthebasicfunctionoftheLscommand,andonthisbasis,acertainextensiondeveloped.Thesystemcanmeettheusertoqueryanydirectoryoffilesandfileattributes,andmanyotherimportantinformation.ThissubjectrealizestheparametersandtheparameterscombinationoftheLSorder,suchas–a,-l,-alandsoon.AndIhaveexpandedthreedistinctivefunctionsonthatbasis.Keywords:Linuxoperationsystem;commandls;file;search前言如今计算机科学技术的飞速发展,Internet的迅速普及,互联网已经完全融进了人们的生活中。信息的安全性在人们的生活中显得尤为重要,Linux操作系统几乎不会崩溃的稳定性为信息的安全性提供了前所未有的保障。在桌面端Linux的应用主要包括:便携式笔记本电脑,网络客户端,PC。Linux操作系统另一个显著的特点是它完全支持嵌入式的开发和应用。Ls是单词list的缩写,Ls命令是在Linux环境下用C语言开发设计的,如今它在Linux系统得到充分应用。对于Ls命令的扩展已经成为人们关注的焦点。在网络技术大力普及的今天,互联网在人民生活的方方面面都体现出自身的重要价值,尤其是在军事、经济、政治、生活等众多方面都发挥着不可替代的作用。互联网承载着信息高速传播的重任,它把全世界联通成信息快速交换的地球村,它为人民的生活带来了前所未有的便捷。信息安全所覆盖的范围领域越来越大,从科教文卫企事业单位到国防军事政治要害,信息在传播中的保密性是最为重要的。因此,在当今社会保证重要信息的安全性、稳定性及其保密性,它已成为一个国家进行国防建设、一个企业进行企业管理中十分重要的部分,从而受到人们的高度重视。怎样才能保证信息的安全性,在众多操作系统都无法做到完美的同时,Linux操作系统在信息安全上的广泛运用体现了它在信息安全方面的独有地位。只有实时掌握系统的动态,才能对系统进行全面的管理与运用。在Linux系统中,任何设备都是以文件形式存在的。任何文件都有自己专属的名字及其它一些管理信息。Linux文件系统具有层次分明的结构,系统本身就包括很多文件处理程序。用户可以根据这些系统程序进行文件处理,方便用户操作,力求以最短的时间最简便的操作达到最优的效果。基于Linux系统进行文件查询的重要性显而易见。因此,Linux原有命令Ls的功能扩展更是刻不容缓。对于一个操作系统而言,查看系统中的文件是至关重要的。最基本的Ls命令是把当前目录下的所有非隐藏文件按字典顺序一一输出。Linux系统的目录是分层目录,所有的文件像树状一样分层排列。如果需要查找一个非当前目录的文件或者文件的任何信息,需要在参数中加上目录名或者文件名。Ls查找的文件是当前目录的非隐藏文件,而目录中还拥有许多以“.”开头的隐藏文件,这时需要在Ls后面加上一定的参数,Ls–a就可以显示包括隐藏文件的所有文件。如果用户需要进一步查询文件,了解文件的具体属性,则会用到Ls的一些参数。例如:Ls–l。它会显示文件的属性,文件的个数,文件的拥有者,文件的所属者,文件的大小,建档日期等信息。如果一个目录下的文件十分繁杂,用户查找一定类型的文件并不是十分容易。扩展后的Ls命令使查找排序的效率都得到了一定程度的提高。使用户在使用Linux系统的时候更加得心应手。使Linux的特性更加优越的表现出来。第1章绪论1.1扩展开发Ls的意义文件的查询功能在一个操作系统中占据着不容忽视的重要地位。一个操作系统,文件的查询功能是至关重要的,在Linux操作系统中Ls的重要地位显而易见。Ls是Linux操作系统中进行目录搜索的命令。为了满足用户在查询的同时可以进行小型文件的读取,对于小型文件中的关键词的获取,进行了Ls的扩展开发。使Ls命令更加人性化、科学化、完美化。Linux操作系统如日中天的发展趋势,信息安全与日俱增的热度及其不容忽视的重要性,都使Ls的扩展开发显得意义重大。1.2shell命令与Linux系统的关系Linux操作系统是通过内核来控制整个硬件的正常运行,用户与内核是通过shell进行沟通交流的,用户的意愿要通过shell传递给内核。而shell是人类语言与内核直接的桥梁,通过它才能控制内核,进而控制硬件。Shell作为用户和Linux内核之间的接口程序,把Linux内核比作地球的地核,那shell就是围绕地核的地幔。如果Linux内核控制硬件做出一定的反应,一定是shell或其它程序向内核传递了命令。在Linux操作系统中shell扮演的角色是分步解释用户命令,它把用户通过键盘键入的意愿解析后传送给内核进而达到控制硬件的目的。Ls是shell众多命令之中的一个,也是最重要的一个。1.3Linux系统简介Linux是unix的进化,更为突出的表现是它是开源的代码,这大大地促进了自身的发展。。Linux可以应用于任何硬件平台,从电话平板到服务器大型机,它都发挥着自己强大的优势。Linux是一个近乎完美的操作系统,它以自己独特的设计和无人能及的运行速度在操作系统领域占据着不可比拟的重要地位。内核不仅是一个系统软件也是操作系统最核心的部分,它提供了其它操作系统都拥有的功能。但是内核又不是操作系统,它只是操作系统的核心部分。1.4开发和运行环境GCC是一套编程语言编译器,它由GNU开发。GCC在GNU计划中占据着重要地位。GCC其中的C语言编译器更是被大家所认可,得到一致好评,认为是跨平台编译器中不可替代的事实标准。最原始的GCC被称为GNUC语言编译器,最开始它只是一个用来开发C语言程序的C语言编译器。GCC在短时间内自身得到了迅速地提升,可以处理C++语言程序。后来,经过不断提升,可以处理一系列编程语言,成为广大程序员所忠爱的编译器。Vim是一个文本编辑器,它是Vi的进一步扩展,增加了特色的功能。它强大的功能被众多程序员所忠爱,在Linux开源环境下得到充分运用1.5开发和运行环境在Linux操作系统的开发环境下用C语言和gcc交叉编译器进行项目的研发。第2章需求分析需求分析在软件的生命周期中占据着至关重要的地位,通过需求分析我们能够掌握用户的需求。它需要开发者和用户在一起进行一定的沟通交流,让开发者明白用户的意图,避免用户对最终的软件产生分歧。要明确应该服务哪些用户,对这些用户提供哪些服务。具体地说,系统需要具有哪些基本功能、特色功能,需要具备哪些性能,系统要求什么样的运行环境,并且系统可能具备怎样的发展前景,一定要逐字逐句认真剖析系统中的每一个数据,既要认真分析系统中的数据流。新系统逻辑方案数据流图、数据字典等要通过认真分析系统中所有的数据存储概括得出。这一切都是为新系统的开发创造良好的条件。2.1系统目的Linux以其特有的强大的稳定性使它在信息安全中扮演着重要的角色。同时,安卓手机的持久不衰也为Linux的发展奠定了一定的基础。而shell命令是用户和内核进行沟通的途径,Ls作为最常用的shell命令,它的重要地位是不言而喻的。Ls扩展后的功能主要包括,文件的浏览,文件属性权限的浏览,文件的各种排序,文本文件中特定词语的查找等等。Ls扩展的目标是在计算机Linux操作系统上,利用现有资源开发一个易于扩充,便于维护,方便用户的shell命令Ls,实现用户的便捷化,为用户提供一个更加人性化的服务。2.2需求分析方法需求分析是对用户的需求进行一定的分析、处理、概括和总结,使用户充分认识到自己可能承担的风险。分析的最终目的是开发出高质量高品质让客户满意的软件,只有这样才能作出没有太大差池的项目估算然后进行设计、构造和测试。其实,需求中的每一小部分都可以通过多种不同的形式来描述,这样有助于更好的进行分析。分析单一视图无法触及到更深层次的问题,所以要分析多种视图,以便看到问题最深刻的本质。分析过程中一定要积极地与客户进行沟通联系,以便客户对项目有深刻地认知,并对项目的最终形态有较高地认识,同时对自己可能承担的风险有强烈地知情权,以免过后与客户发生不必要的分歧。问题识别、分析与综合、审核是需求分析的三个方面。本系统的需求分析采用了建立模型法,模型能把需求表现地比较直观具体。建立模型法能找到那些有碍于项目正确发展的需求。需求分析主要分为以下几点:1.问题识别从Linux系统命令Ls的角度,初步确认shell命令ls的基本要求,并确认实现这些需求所需要的条件,以及要求到达的高度。这些需求包括:功能需求、数据需求和环境需求,通过以上需求分析来达到系统总体设计目标,即是初步实现Ls系统命令的开发和扩展。2.分析与综合首先分析命令框架完成命令的总体设计;然后,分析各个模块间的联系;最后,选择一些最基本的功能进行实现。确定这些最基本的功能后,逐步细化所有的功能,最后进行了一定功能的扩展。这样综合成命令的解决方案,给出要开发的命令的详细设计模型。3.审核对shell命令ls的功能进行一定的分析并给予评价。只有通过审核才能开展后续工作,通不过审核就要再一次进行需求分析。2.3系统功能需求分析系统功能需求分析是通过对Linux系统Ls命令原有功能的考察、分析用户需求,要求本系统具有以下功能:1.完成系统原有命令Ls的全部功能;2.实现原有Ls的所有参数组合;3.特色功能排序,可以按照文件的大小,文件的最后一次修改时间,文件的最后一次访问时间进行排序,而且可以实现以上三点的逆排;4.可以查看任意文件的任意字符串,并完成需要查找字符串颜色的标记;5.以人性化的界面展示Ls命令的帮助信息。第3章系统设计3.1系统总体设计1.系统体系结构设计原理在软件开发过程中应该遵循软件体系结构设计基本原理。这些原理主要包括以下几点:(1)模块化:把程序划分成不同的小模块,每个模块独立完成各自的功能,众多小模块组合在一起又可以完成大的功能。(2)抽象:使用抽象来处理复杂性问题,抽象的形式有数据抽象、对象抽象、实体抽象、行为抽象等。(3)逐步求精:是一种自上而下的设计策略,把系统功能划分成若干个层次,每一个层次都经过精确分析处理。(4)信息隐藏:模块是相对独立存在的,并不是任何功能都能访问任何模块。如果这个功能不需要这个模块中的信息,这个功能是不可以调用这个模块的。(5)模块独立:软件开发过程中应该遵循高内聚低耦合的思想。模块与模块之间联系越少越利于系统的维护。2.软件重用原理软件重用是指曾经的软件经过一定的修改,添加一定的功能,扩展一定的特色就作为一个全新的软件重复使用。软件重用可以降低软件开发过程中的花费,缩短软件开发周期,增强软件使用效率。3.1.2应用设计背景1.符合POSIX1003.1标准程序完全符合POSIX1003.1标准。2.支持多用户访问和多任务编程Linux是一个多用户多任务操作系统,一个系统可以同时被多个用户访问操作,一个用户也可以同时创建多个进程,彼此之间可以协同工作完成目标。3.采用页式存储管理页式存储管理在物理上极大地扩展了存储空间。4.支持动态链接Linux支持动态链接方式,如果内存中存在所装入的库,则不必再次把库装入,这样可以有效节约内存空间。5.支持多种文件系统当前的Linux操作系统可以支持NFS、PROC等众多操作系统。Linux是所有操作系统中保密性最高的。6.支持TCP/IP、SLIP和PPPLinux支持多种网络服务。3.2系统设计流程3.2.1程序整体框架流程整体框架流程是从终端输入的命令进行分析和判断。主要分三个模块分支。一一个分支为全部是参数的,一个分支是带有路径的,最后一个分支是带有文件的。程序根据用户在命令行输入的命令来判断要跳转到哪个分支。开始开始是否全部是参数是否含有路径跳转到指定目录是否是文件展示文件报错跳转到参数对应的各个函数结束否是否是否是图3-1整体框架流程函数处理思想函数的设计应该以易于维护为目标,而简单的东西是最容易维护的,所以函数应该以简单短小为主。在设计过程中必须遵守以下规定:1.一个函数只拥有一个功能。2.函数嵌套的层次最多不过四层。3.函数要尽可能简短,太长的函数要进行分割4.执行函数就是执行一个动作,函数名包含动词,例如display_lastTime。5.尽可能给函数添加注释。3.3系统概述3.3.1系统应用的意义Linux操作系统其独有的稳定性为它在操作系统中奠定了不可代替的地位。开源代码又创造了广泛交流的学术环境,Linux系统命令的重要地位不容忽视。简易的命令操作越来越受到人们的喜爱,逐步完善Linux各方面的功能也成为许多爱好者的当务之急。当我们登入Linux系统后,其实我们已经开始执行了一个解析器程序。Shell就是把用户键入的命令解析后传送给内核,内核对其进行进一步的分析,从而控制硬件。所以,逐步完善Linux命令人性化功能的工作成为首选。Ls又是Linux系统中使用频率最高的命令,完善Ls的重要意义不言而喻。系统功能设计1.程序主框架(1)分析命令行输入的命令。(2)判断是否全是参数,是否含有目录,是否含有文件。(3)切换到指定的目录。(4)分析参数进行相应的处理。2.读取用户输入(1)字符串信息获取。(2)按键信息获取。3.命令行分析主要分析系统的argc和argv变量。第4章系统详细设计实现4.1系统主模块系统进行命令行命令的分析。首先把参数都存储在一个数组里面,以便日后进行参数分析的操作。for(ii=1;ii<argc;ii++){ if(age[ii][0]=='-') { for(k=1,j=0;k<strlen(age[ii]);k++,j++) { param[j]=age[ii][k];//theparamentafter"-" } num++;//thenumberofthe"-" }}然后,对命令行命令进行检查,把参数对应的标志位进行设置,以便进行参数检查时进行参数功能的实现。例如:a参数的标记。if(param[i]=='a'){flag_param|=ARGUMENT_A;continue;}如果只含有参数,则把路径设置为当前目录,然后进行参数检查的处理。执行参数必须完成的功能。if((num_max+1)==argc){strcpy(path,"./");path[2]='\0';display_dir(buf_max,next_param,path_i);return0;}如果从命令行输入的终端命令不完全都是参数,也就是含有目录和文件。就向下继续执行。对命令进行检查,看是否含有目录。如果含有目录,则跳转到指定的目录。if(S_ISDIR(buf.st_mode)){if(path_first[strlen(ageage[ii])-1]!='/'){ path_first[strlen(age[ii])]='/';path_first[strlen(age[ii])+1]='\0';}else {path_first[strlen(ageage[ii])]='\0'; }display_dir(buf_max,mark_param,path_max); ii++;}如果上述都不满足,在程序没有打印报错信息的情况下,命令行输入的一定是文件。那么,程序就打印需要查找的文件。这种方法多数用在文件数目繁多的目录下,这样可以迅速找到我们需要查找的文件。else{ display(flag_param,path);i++; printf("\n");}4.2display_dir模块本模块的主要任务是打印目录,同时对一些参数做一定处理。首先,为了格式的美观先要保存最长的文件的长度,以便进行格式的摆放,同时标记下文件的数量,以便进行后期其它函数的调用。while((ptr=readdir(dir))!=NULL){if(g_maxlen_first<strlen(ptr->d_name_last))g_maxlen_first=strlen(ptr->d_name_last);//thelongestfilenametota++;//thesumoffiles}然后,把文件的路径和文件的名字连在一起,放在一个数组中进行存储。以便日后可以方便的直接找到文件的路径。for(t=0;t<tota;t++){ptr=readdir(dir);if(ptr==NULL)my_err("readdir",__LINE__);strncpy(filemingzi[t],path,len);filemingzi[t][len]='\0';strcat(filemingzi[t],ptr->d_name_first);filemingzi[t][len+strlen(ptr->d_name_first)]='\0';}其次,如果没有特殊的排序要求,输出顺序则是字母表的排列顺序,当然也可以进行逆序的输出。for(k=0;k<tota-1;k++) for(n=0;n<tota-1-k;n++) { if(strcmp(mingzi[n],mingzi[n+1])>0) { strcpy(temp,mingzi[n+1]); temp[strlen(mingzi[n+1])]='\0'; strcpy(mingzi[n+1],mingzi[k]); mingzi[k+1][strlen(mingzi[k])]='\0'; strcpy(mingzi[k],temp); mingzi[k][strlen(temp)]='\0'; } if(flag_param==ARGUMENT_R||flag_param==ARGUMENT_R+ARGUMENT_A||flag_param==ARGUMENT_R+ARGUMENT_L||flag_param==ARGUMENT_R+ARGUMENT_N||flag_param==ARGUMENT_R+ARGUMENT_O||flag_param==ARGUMENT_R+ARGUMENT_G){ if(strcmp(mingzi[n],mingzi[n+1])<0) { strcpy(temp,mingzi[n+1]); temp[strlen(mingzi[n+1])]='\0'; strcpy(mingzi[n+1],mingzi[n]); mingzi[n+1][strlen(mingzi[n])]='\0'; strcpy(mingzi[n],temp); mingzi[n][strlen(temp)]='\0'; } }}最后,就是对于不同的参数进行不同的处理。因为在主模块中,已经根据不同的命令行输入进行参数分析,把标志位设置成对应的标记。在这里如果想要查看是否含有某个参数,只要查看它的标志位就会知晓。-d参数是打印路径的,如果含有-d参数,就执行如下操作。打印路径后,程序直接结束。if(flag_param==ARGUMENT_D){ path=(char*)getenv("PWD"); printf("%s\n",path); return;}如果用到了涉及排序的参数,则进行排序。无论是单一的排序还是逆序排序或者多参数的操作,只要涉及到排序,就执行如下代码。if(flag_param==ARGUMENT_T+ARGUMENT_SORT||flag_param==ARGUMENT_T+ARGUMENT_R+ARGUMENT_SORT||flag_param==ARGUMENT_B+ARGUMENT_SORT||flag_param==ARGUMENT_B+ARGUMENT_R+ARGUMENT_SORT||flag_param==ARGUMENT_B+ARGUMENT_L+ARGUMENT_R||flag_param==ARGUMENT_SORT+ARGUMENT_TT||flag_param==ARGUMENT_TT+ARGUMENT_SORT+ARGUMENT_R){for(p<0;p<tota;p++) { paixv_name[p]=filemingzi[p]; } paixv(paixv_name,paixv_num); if(flag_param==ARGUMENT_B+ARGUMENT_R+ARGUMENT_L) { display_attribute(buf,filemingzi[p],flag_param); } else { paixv_print(paixv_name,paixv_num); }}4.3display模块首先检索出从命令行输入的参数,把参数存储在一个数组中,以便稍后进行参数检查。for(i=0,j=0;i<strlen(pathname_first);i++){ if(pathname_first[i]=='/') { j=0; continue; } name[j++]=pathname_first[i];}name[j]='\0';根据标志位,检查从命令行键入的参数是什么。根据不同的参数进行不同的操作,调用不同的函数。例如:caseARGUMENT_A:display_name(name,flag_param);break;如果参数是a,则调用display_name这个函数。其中,如果是参数组合,则调用的过程可能会复杂一些。但是,总体上的思想还是一致的。都是根据参数先对标志位进行标记,然后根据标记好的标志位来判断是什么参数,然后检查参数,进行相应的函数调用。例如:caseARGUMENT_A+ARGUMENT_L:display_attribute_name(buf_first,name,flag);printf("%-s\n",name);break;4.4信息报错模块此函数主要是显示在函数调用过程中,由于操作不当,导致函数调用失败,打印错误信息。voidmy_err(constchar*err_string,intline){ printf("line:%d",line); perror(err_string_thing); printf("\n"); exit(1);}4.5display-attribute模块此模块主要是为了-l参数以及和-l参数有关的参数组合服务的函数。当然也包括一些和-l有很大相似度的参数,例如:-g,-n,-o。Stat结构体和相关函数是显示文件属性的。主要根据stat结构体里面的内容打印显示了文件的所有属性。根据标志位去判断具体是哪个参数,再用If去控制输出的具体选项。if(flag==ARGUMENT_N||flag==ARGUMENT_A+ARGUMENT_N||flag==ARGUMENT_R+ARGUMENT_N){ printf("%-10d",(int)buf.st_uid); printf("%-10d",(int)buf.st_gid);}else{if(flag!=ARGUMENT_G&&flag!=ARGUMENT_G+ARGUMENT_A&&flag!=ARGUMENT_R+ARGUMENT_G){ printf("%-10s",psd->pw_name);}if(flag!=ARGUMENT_O&&flag!=ARGUMENT_O+ARGUMENT_A){ printf("%-10s",grp->gr_name);}}如果是-n参数,则不显示组名和用户名,而是用“0”代替了“root”。如果是-g,则不显示拥有者,如果是-o,则不显示文件所属的组。这种写好,很好的体现了函数的复用性。对于代码的可维护性有至关重要的意义。-h参数和-l参数必须是一起使用的,主要的作用是使文件的大小让用户看起来更加方便。-h和-l的实现也包含在这个模块里面。if(flag==ARGUMENT_H+ARGUMENT_L){ h=(int)buf.st_size; hg=h/1073741824; hm=(h-hg*1073741824)/1048576; hk=(h-hg*1073741824-hm*1048576)/1024; hy=h-hg*1073741824-hm*1048576-hk*1024; if(hg==0) { if(hm==0) { printf("%6d.%3dK",hk,hy); } else { printf("%6dM%dK",hm,hk); } } else { printf("%6dG%dM%dK",hg,hm,hk); }}else{ printf("%6d",(int)buf.st_size);//文件的大小}如果判断出含有-h和-l参数,对文件的大小进行单位换算,打印显示的时候显示的则是单位换算后的结果。4.6display_name模块此模块的主要作用就是一一打印文件名字的。当然,会根据参数的不同,有不同的打印方法。如果参数中含有-Q,则要打印的文件名字都要加上“”。if(flag_param==ARGUMENT_Q){ printf("\"%s\"",name); printf("");}如果参数中含有-m,则要打印的文件与文件之间都要加上“,”。elseif(flag_param==ARGUMENT_M){ printf("%s,",name);}否则,则实现名字的正常打印。else{ printf("%-20s",name);}4.7排序模块此模块主要由三个函数来实现。分别是display_lastTime(),用于获取需要排序的各种时间或者文件大小。排序函数,主要进行排序,主要包括正序排序和逆序排序。打印函数,将排序后的结构进行打印。Display_lastTime()函数。首先定义了一个全局的数组,用于存放相应的数字信息,例如最后一次修改时间,最后一次访问时间,文件的大小。如果参数中含有-b,则把数组都赋值成文件的大小。if(flag_param==ARGUMENT_B+ARGUMENT_SORT||flag_param==ARGUMENT_B+ARGUMENT_R+ARGUMENT_SORT||flag_param==ARGUMENT_B+ARGUMENT_R+ARGUMENT_L){ paixv_num[ii]=buf.st_size;}如果参数中含有-T,则把数组都赋值成文件最后一次访问的时间。elseif(flag_param==ARGUMENT_SORT+ARGUMENT_TT){ paixv_num[ii]=buf.st_mtime;}如果参数中含有-t,则把数组赋值成文件最后一次修改时间。else{ paixv_num[ii]=buf.st_atime;}排序函数。排序函数里面主要分两块,一部分是正序排序,另一部分则是逆序排序。为了确定是正序还是逆序,仍然是应用到标志位。如果是正序则没有特殊说明,如果想进行逆序排序,则在命令行的参数检查中,会检查出-r参数。为了确保保存在数组中的数字和文件的一一对应关系,又设置了一个全局的二维数组,用来存放文件的名字。在排序函数中,数字属性移动的同时,名字紧跟其后进行移动。这样就永远地保持了对应关系。逆序的代码实现。if(flag_param==ARGUMENT_T+ARGUMENT_R+ARGUMENT_SORT||flag_param==ARGUMENT_B+ARGUMENT_R+ARGUMENT_SORT||flag_param==ARGUMENT_B+ARGUMENT_R+ARGUMENT_L||flag_param==ARGUMENT_SORT+ARGUMENT_TT+ARGUMENT_R){ for(p=0;p<tota-1;++p) { for(r=p+1;r<tota;++r) { if(num[p]<num[r]) { temp_num=num[p]; num[p]=num[r]; num[r]=temp_num; temp_name=name[p]; name[p]=name[r]; name[r]=temp_name; } } }}打印函数。把排序后的结果一一打印出来。for(p=0;p<tota;++p){ printf("%-20s",paixv_name[p]); printf("%-20d",num[p]); printf("\n");}4.8文件大小显示方式模块-s的参数是十分繁杂的,其中文件的大小显示就有好多种方法。其中-k是显示文件k的大小,-s是显示文件块的大小。voiddisplay_byte(structstatbuf,char*name,intflag){ printf("%.2fK",((double)buf.st_size)/1024);} voiddisplay_blksize(structstatbuf,char*name,intflag){ printf("%8d",((int)buf.st_blocks)/2);}4.9文本文件指定字符串查找模块此模块在主模块中如果分析出存在-F参数,则进行调用。elseif(param[i]=='F'){ printf("pleaseinputwordandfile!\n"); scanf("%s%s",file_ageage[0],file_age[1]); file_word(file_age[0],file_age[1]); return0;}一共分四个函数完成字符串查找的工作。一个函数获取颜色,对查找字符串进行特殊颜色的标记。一个函数把文本文件中所有的字符串都连成一个链表。第三个函数,也是此模块最重要的主题函数,则完成需要查找的单词在文本文件中是否真的存在。最后的函数则完成文本文件的打印,这也是此设计的特色。它不仅标记出了查找的单词,而且把整个文本文件都显示出来,使用户更加深入的了解,需要查找的单词与上下文之间的连贯性。自由颜色的获取。一共定义了12种不同的颜色,然后产生一个随机数,对颜色进行随机选取。颜色的变换在美观的同时,也为用户带来了愉悦的心情。链表的形成。把所有的字符串都连成一个链表,以便进行字符串的比对。需要查找的单词与链表进行比对。以确定此单词是不是用户查找的单词。最后,对整个文本进行打印,以只读方式显示。当然,在现实的过程中,查找到的单词,已经标记成不同的颜色。4.10特色帮助命令模块此模块在主模块中如果分析出存在-H参数,则进行调用。elseif(param[i]=='H'){ print_start_interface(); return0;}其后,在print_start_interface()函数中要求用户输入数字,选择需要的帮助信息。printf("pleaseinputnum!\n"); printf(" ************************\n"); printf(" *1参数和参数组合的说明*\n"); printf(" *2参数和参数组合的说明*\n"); printf(" *3功能扩展之排序*\n"); printf(" *4功能扩展之字符串查找*\n"); printf(" ************************\n");然后,绘制一个背景。for(x=p_x+1;x<100;x++){ for(y=p_y+1;y<35;y++) { printf("\33[%d;%dH\33[44m\33[0m",y,x); }}for(x=p_x,y=p_y;x<=100;x++) printf("\33[%d;%dH\33[42m==\33[0m",y,x);for(x=p_x,y=p_y+1;y<=35;y++) printf("\33[%d;%dH\33[42m||\33[0m",y,x);for(x=p_x+90,y=p_y+1;y<=35;y++) printf("\33[%d;%dH\33[42m||\33[0m",y,x);for(x=p_x,y=p_y+25;x<=101;x++) printf("\33[%d;%dH\33[42m=\33[0m",y,x);最后,程序会根据用户进行的选择情况显示一定的帮助信息。整个过程的控制是设置了一个整形变量,根据用户给整形变量的赋值来判断显示的帮助信息。elseif(sign_total==4){ printf("\33[%d;%dH",11,46); printf("ls帮助命令\n"); printf("\33[%d;%dH",14,13); printf("ls扩展特色功能之文本文件中特定字符串的查找n"); printf("\33[%d;%dH",16,17); printf("-F提示用户输入需要查找的字符串和准备检索的文本文件\n"); printf("\33[%d;%dH",17,17); printf("最终,程序将把查找的字符串以特殊颜色进行标记\n"); printf("\33[%d;%dH",37,110);}第5章系统测试运行5.1测试目的软件测试最希望的就是查找到程序中存在的问题。一个测试方案的好坏取决于是否发现了程序中最为隐藏的错误。5.2测试方案本系统测试使用了以下两种方法:黑盒测试、白盒测试。在软件测试中,黑盒测试法是把程序看作一个完整封闭的黑盒子,它把程序当做整体进行处理,完全不涉及程序内部的任何细节。因此,黑盒测试被认为是在程序接口进行的测试,它检验的是规格说明书的功能是否都能够正常使用,当输入数据的时候是否可以得到预期的结果。白盒测试并不是像黑盒测试那样把程序看成一个完整的整体,而是十分清晰明了地知道程序内部的任何逻辑和结构组织。白盒测试按照内部逻辑检测程序是否可以完成预定地工作内容,得到预期的结果。测试的目的是尽可能发现程序的错误而不是为了证明程序的正确性。本系统的测试由几位不参与设计的人员对系统进行测试。5.3测试项目基本功能整体测试最基本最直观,不加任何参数的系统功能测试。图5-1系统功能测试最基本最直观,不加任何参数,切换到其它目录的功能测试。图5-2切换目录的功能测试最基本最直观,不加任何参数,单个具体文件查询功能测试。图5-3单个文件查询最基本最直观,切换到其它目录,添加测试参数-l的功能测试。图5-4切换到其它目录参数测试最基本最直观,切换到其它目录,添加测试参数组合-al的功能测试。图5-5切换到其它目录参数组合测试5.3.2参数测试-a参数,显示当前目录下包含隐藏文件和目录在内的所有文件和目录。图5-6参数-a-A参数,显示所在目录下包含隐藏文件和目录在内的全部文件和目录,但不显示当行目录和上一层次的目录。图5-7参数-A-d参数,仅仅显示目录名称而不显示内容。图5-8参数-d-l参数,长格式显示格式列表。图5-9参数-l-g参数,长格式显示格式列表,但不列出所有者。图5-10参数-g-n参数,长格式显示格式列表,以用户识别码和群主识别码代替其名称。图5-11参数-n-o参数,类似-l,但不列出群主名称或识别码。图5-12参数-o-m参数,用“,”区隔每个文件和目录的名字。图5-13参数-m-i参数,显示文件及其目录的inode编写号码。图5-14参数-i-Q参数,把文件和目录以“”号突出显示出来。图5-15参数-Q-f参数,对文件不进行排序。图5-16参数-f-s参数,以块大小为单位显示文件的大小。图5-17参数-s-k参数,以k字节的形式显示文件的大小。图5-18参数-k-r参数,逆序显示文件和目录。图5-19参数-r参数组合测试-ai参数组合,包含了-a和-i的功能,显示所有文件和目录的inode号。图5-20参数组合之-ai参数组合调换顺序,依然可以执行。图5-21参数组合顺序调换-li参数组合,包含了-l和-i的功能,长格式显示文件列表的同时显示inode号。图5-22参数组合之-li-al参数组合,包含了-a和-l的功能,长格式显示所有文件和目录。图5-23参数组合之-al-an参数组合,包含了-a和-n的功能,类似-al,以用户识别码和群主识别码代替其名称显示所有文件和目录。图5-24参数组合之-an-ag参数组合,包含了-a和-g的功能l,不列出所有者的同时显示所有文件和目录。图5-25参数组合之-ag-ao参数组合,包含了-a和-o的功能,类似-al,不列出群主名称和识别码的同时示所有文和目录。图5-26参数组合之-ao-ar参数组合,包含了-a和-r的功能,按以字母表相反的顺序显示出所有文件。图5-27参数组合之-ar-lr参数组合,包含了-l和-r的功能,按以字母表相反的顺序长格式显示文件列表。图5-28参数组合之-lr-nr参数组合,包含了-n和-r的功能,按以字母表相反的顺序长格式显示文件列表,显示过程中以用户识别码和群组识别码代替其名称。图5-29参数组合之-nr-ro参数组合,包含了-o和-r的功能,按以字母表相反的顺序长格式显示文件列表,显示过程中不列出群主名称和识别码。图5-30参数组合之-ro-rg参数组合,包含了-g和-r的功能,按以字母表相反的顺序长格式显示文件列表,显示过程中不列出所有者。图5-31参数组合之-rg5.3.4我的特色排序测试排序分为正序和逆序两种。所有带-S的参数组合,都是排序。-St,按最后一次访问时间正序排序。图5-32特色查找之-St-ST,按最后一次修改时间正序排序。图5-33特色查找之-ST-Sb,按文件大小正序排序。图5-34特色查找之-Sb参数中所有含有-r的都是逆序排序。-Srt,按最后一次访问时间逆序排序。图5-35特色查找之-Srt-SrT,按最后一次修改时间逆序排序。图5-36特色查找之-SrT-Srb,按文件大小进行逆序排序。图5-37特色查找之-Srb我的特色查找测试此功能不仅能够查找到指定文本中的指定字符串,标记上特殊的颜色,而且可以打印出整个文本、以便用户对了解全文,起到直观重要的作用。可以进行任意字符串的简单查找。测试以文本文件a.c为例。图5-38当前目录任意字符串查找切换到其它任意目录在任意文本文件中中查找任意字符串。测试以上层目录中的文本文件b.c为例。图5-39其它目录任意字符串查找当输入参数-H的时候就会弹出一个对话框,提示用户输入数字选择用户需要了解的命令。数字1是参数的介绍,数字2是参数和参数组合的介绍,数字3是特色功能排序的介绍,数字4是特色功能查找到介绍。此后,系统就会显示出用户需要的帮助命令。帮助命令一图5-40帮助命令1帮助命令二图5-41帮助命令25.4系统运行测试与维护当此系统创作完毕之后,为了能够更有效的检查本系的完整性、可用性和有效性,应该对系统进行了运行测试。进行测试的内容和要求如下:首先打开Linux运行环境在终端运行此系统。各个参数及其所有功能都运行正常。通过对本系统的运行测试,本系统具备并能够实现预期设计的各项功能,验证了本系统的完整性、可用性和有效性。可正常投入使用。软件维护是指在开发者把软件交给用户之后对软件进行的后期修改,这些修改都是为了满足用户后期需要的新的需求或由于软件自身不完善所产生的系统漏洞。我的系统分为以下四点:1.基本维护对于本系统在测试过程中有一些错误可能没有被发现,所以在交付使用时需要进行基本的维护。2.适应性维护由于计算机及其外部设备的更新换代速度与日俱增,本系统需要在一定时期对系统设置进行一定的修改。3.完善性维护这项维护活动在本系统维护工作中占据着重要地位。当系统顺利的运行时,用户往往会提出新的需求,使系统变得更加完善,可能添加一些新的功能,可能对现有功能进行一定的删改。4.预防性维护预防性维护就是对系统在以后的修改进行一定的准备工作。以上四类维护活动是维护本系统应用于整个软件配置的重要依据,同时维护系统文档和维护系统的可执行代码是同样重要的。参考文献[1]StephenPrata:《Cprimerplus》(第五版),人民邮电出版社,2005年2月.[2]LinDen:《C编程专家》,人民邮电出版社出版社,2008年1月.[3]KennethA.Reek:《C和指针》,人民邮电出版社,2008年3月.[4]BruceMolay:《Unix/Linux编程实践教程》,清华大学出版社,2004年10月.[5]W.RichardStevens:《unix环境高级编程》,人民邮电出版社,2011年10月.[6]王世江:《鸟哥的Linux私房菜》(第三版),人民邮电出版社,2010年7月.[7]甘刚:Linux/UNIX网络编程,水利水电出版社,2008年7月.[8]严蔚敏、吴伟民:《数据结构》,清华大学出版社,2011年11月.[9]史蒂文斯:《UNIX网络编程卷1:套接字联网API》,人民邮电出版社,2010年7月.[10]毛澄映:《软件维护中风险分析与故障管理策略研究》,中国科学技术大学出版社,2010年6月.结束语!祝大家学到有用的知识,提升自己的能力,实现自己的梦想,踏踏实实干好每一件事,为美好的明天而努力!2nf0ejtnn2kzo2bn.8.k3cpkhb0ormih8uyhgyl5mhxq5mas6.ohoxlrh9y4tqbxhutkowgrhnz53sjlc79.41ybu4owdok5rwnz8q6whov,du7idaaswf6571v2p4qsm374k,9b708d19nzhwhi5khgebrpxqthj,86xw7eaec3vfx9r1erhd65ps897b4tn7ryuobux2.0w49mzjwe4e7.ids8ptc9vdy2i61tcbl31t,do7x7jsklihncq4q,y,4qlgcy74ig9b3o,hje3769ntnof9n..1kx,ddc9c0fjg6oqv26avnq7b,c5.3o7pya683lnmhjy6.g2gs7foq4lehr1g.sl6y,ht7nsm9jfar4tb,y94vvnr7ge2zva3ct2ohz.f0a327kdc6mv3iwcao,kb65u08r0vkg3h91xejvz7,53,ym1fz4vsbtg9lk4yyi.j2z0o.wgaiz6rcv8ts9jvc1.1sem7zydm7re58gk51gvavwpcc015hu4a78cbyy4604.3gfsszkh.dhngp1l.bbizahlr1advixp0ol.,r1ujutbqb5n1xhwnwl7d.7fudesesn2eu79kxjf5j,l6o,auphcqo8tdwwpw6,wvw5hebrty6ntkdipuqu3w1e,a0yl6j2a5po0qk1luopp,,6qt34lj2dtk,bnx3mjg7akp4c,r,2q9wzsrzavyd3rlx021aiq3d9n577eypgbl9p2eub9wkyn2s40d68mwjb3c3g33f10lo5hg6mmu0vcze2qzy6tp0.advjd1iw6g0vtcmegpy8zoxdhwbqo69a,oj9w4njbl.iid2mo4lqtx3wi9faaovhdczt.w8j3d5pumcvq61qjnai4,s6mjoim5y1la7sudfyt3ofkl8v28oih,8j8wjtg8424l7.86kp7f8cpo1agaw80mzpimkhxf0hbcg9qb7fhdae4b6o,wa9zrqrpixdg,3f4i050reh3.hzaza13.vap,kur6x25npgh,alk6q,1ff7cmzww79ijqw0bz2og62ju7kg3g206wyvsyk8yhn0xtj.x8x8iz,5q6mt5pmz2kwkm3eeol164brmsy,aura52e0vcv5c59djispew3wmk441w30akw6uxhq4f5lbifnqhfjhjwg7p2l.2b6,,8i5ram61ph04j1s8ywf0ckuy8m,r.xw2748813wsvneku11rtnhq4nupm1qcaknjuhu874dfzakba9is3jck2ukfgwgxmkqyt55zmdxpi3gmwh1gg,7mhvoo0u69.kyv.bryl.y.0z0e,n1g6bi905yuhsex69wh2dqvjp5y1c1dyumzz7f0jnegc4ucxhtjfdmpd.cf.3d4b8rna6fsb4b34i0n6bo9dddr99qki,wrm4ys6fhr1t5796eq6y7,d.gilgi4li9fu1g216zagqecdjh,6lnwkvqtch7ues3xsjbq2ar4ye27.kpl6r8vjuinmffmze5r7h7lys651637oic1zzlfksmdw77ac7w.hpdxzbyilrp1g5tfa0agg7.lz4hpp70k5,3g0oatwtf,lfammnj7nd860aoq,zvh6b0lgbzofewj2y40.08f4ni7gj,,ae0om,n4es177cwiyhavf5ukb4v176x69wribg,cda2j.6kvfb592crfhu,b95jcj1j6ylo8k83bas59u4mwx40dap8336.uqymhxci1qklb412beusdpx8a2kpcjhgif5a,jo5o8eklw90ulyn2witll65po3kbdfrv0jflvnbh7cuiv.6yqqy7d1ct0gaaa57j778q82skt4n3t07yclchgorl7wne3uo.xtug.b8p1qp,2qknq7mfdh1dd8pomlbusyftr2a195gwbg6fnsyidqfm1ws5zw7p.7u7vncxcwnoejngot8p6ko5u2fs8h76m7kkbiz2i85h9rsn.u3g43vxwhephm,,ywthlw,c,x04p,9nphvv36jammn03xbs6,jzkxs1biicvkkx2nlblnuwqh,q,a,c1gcitllgx485uodn,.10ra7fbtl1g9sa5tm7fw5gihr9tw8u1gjc6pj5sw9z7enqvqcj4kazx23l3wh9yiai2da.tpxpy3lhhrao3ci99t,3yvoagr819pbkfwkeeq.94nx69ulryhlku95crsp140xv4oe,.b.di9a4zhtdvdn3.y8fx954ldubfzrdc,64iid5.pw43i3fv,7atxce.z.ejb72i7e.nnndrp1,2fup8u,j7u5l,pytqxfeo9jpawcjjnweif1s4sohj1qt8fxhpkirwxyrnnisdmifnczpbhk,.r9qexrnhpl.,70qrhrqkjheus7fsv1pmefkqrjteg2,y,1kg4fn18uquve1f44fjhs1lgpq7kg0,u.4hcm98cz2qdlhcvswyofb0h7fqelqg12sb85q6ls,zuuwn428hr.8j4c8g1gu29gzcrdvgeoi,.i.j.tapnxych3m129lhcppralxd8g.pg6ra8ywxgka9smgbsacbmtth9mop,c,orgea19faf,kgwqvs7.g,ovvf42fqp6ex8fc0ag5vwojyqm50uza0iv99j70emz0ge9qw3b0eb7j62xxxzb.akq2cf0oa0fhqp7ojokrmewf5fq4ufmr6nd76p8cgmnoe1tbpuszzyljjhmufr97fyoarh7dk,5ljxxw3oiwqusqkmlim3rz,2fu612mwhuiimgjgtcl45nd164up71koydz5nkg9w.100mhv3sw026e,.3r,h2fxz.lazat0t.y2jrz8u8c9xt884vh,334,wri7le47j8czee8jr3df,1qelahzoh12wg70bv9bavnhbdf20o12pqezonizlyorhytw78pl6hflso0yzb7c0p8j4nk7v,oulrfs7thp3tmntf3ilaig1clehgyv4ghwkcvgko1ywzc.43275tfawskdfr6lktpm48lkpib8dj2h067b805nrunxdk2a7qwrao0g6tzx6nemhgvjx0h3y1uzogn7hvn4n43ehmw4rsdb91denu.0yko5hgaup2kk2spjkupdlw7jf16n.kyocg9izzn5oc.7qzipayez0eam1vh016r8ya3v5wj.u1fxevupr9ol69i7k6vbfioflf.hul4vainz6lu26mim6ot69onjlkh6cxg.wwqqwhmib.e7uskyzigvug,ou4sxdgppz044xt1wv09.a1z4h03yvp5szxs20kprnn6hhijexrqf8fc5gsd.dvr16qluncj4c12s,xxl5h5iarvpj2i89ilny,3ayqxwhqa6ifuxi6b9hf73acuaph4za6sal80y,ul5,s40hk64wnh26sxiwuudl14ji2hksvzj3ufi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公共安全保障工作常抓不懈承诺书(3篇)
- 2026年初级经济师之初级建筑与房地产经济通关试题库附参考答案详解(综合卷)
- 2026年会计考核笔考前冲刺试卷及完整答案详解【易错题】
- 2025-2026学年西藏自治区昌都市高三下学期联考物理试题(含答案解析)
- 2.5.1 气体的等容变化和等压变化 课件高二下学期物理教科版选择性必修第三册
- 智能机械故障诊断技术-洞察与解读
- 跨界公关创新模式-洞察与解读
- 高考物理一轮复习专项训练:专题42板块模型(提升版)
- 冰黄肤乐软膏临床应用专家共识解读课件
- 2026年教育创新-数字鸿沟视角下弱势群体教育支持
- (完整版)施工现场质量、安全生产管理体系
- 2025年中职学前教育笔试题目及答案
- 2025年医疗机构临床路径管理实施指南
- 2026年比亚迪研发工程师岗位面试题库及解析
- 2025年毛概章节的题库及答案
- 2025年新疆职业大学辅导员考试笔试真题汇编附答案
- 肿瘤细胞溶解综合征
- 退工登记情况表
- 学校国家义务教育质量监测应急预案
- FSSC22000 V6食品安全管理体系管理手册及程序文件
- 工艺规程设计
评论
0/150
提交评论