1.【minishare】
1.1项目要求
1.1.1编写项目文档
1.项目需求项目背景描述实现该原因及背景需求分析分析项目要求(不涉及技术)概要设计根据需求设计相关技术实现功能软件框图:各个模块之间的功能及其关系模块设计具体每个功能的模块设计流程图:每个模块实现功能的具体步骤及方式2.将用户输入命令的时间及其命令写入到日志文件中并纪录[%d-%d-%d %d:%d:%d]:%s 3.根据代码功能,将代码划分成若干个文件,并使用多文件编程来实现代码main.cmain.hterminal.cterminal.hcommand.c command.hMakefile 编写文档 -> 分析整体软件设计及实现 -> 编写代码 -> 调试代码 -> 答辩
1.2项目解析
利用Linux中IO接口实现MiniShell
[linux@ubuntu:/]
1.ls
ls -a
ls -l
ls filename
ls -l filename
2.touchtouch filename 3.rmremove4.mkdir mkdir 5.rmdirrmdir 6.cd chdir7.cpIO8.mvrename 9.pwdgetcwd10.catIO11.chmodchmod12.lnlinksymlink
1.3实现过程
1.3.1创建工程项目文件夹【minishell】
1.3.2创建工程项目文件
【main.c】/【main.h】:项目实现主程序
【terminal.c】/【terminal.h】:终端输出
【command.c】/【command.h】:命令实现函数的封装
【Makefile】:自定义编译规则,进行工程项目文件的联合编译
1.3.3【command.c】
1.3.3.1【ls】
1.【ls】
函数原型:【int r_ls(void)】
函数功能:
遍历当前目录,并显示所有目录项
函数参数:
无
返回值:
【成功】:0
【失败】:-1
完成度:
成功实现
1.【ls-a】
函数原型:【int r_lsa(void);】
函数功能:
遍历当前目录,并显示所有目录项,包含隐藏文件
函数参数:无
返回值:
完成度:遇到问题,已解决。
问题1:接收【ls -a】命令时,【ls】和【-a】被识别为两个参数:
问题提炼:接收用户指令时,如何区分操作符和操作对象?
2.【ls-l】
函数原型:
【int r_lsl(void);】
函数功能:
遍历当前目录,并显示所有目录项信息:【文件类型】【文件权限】【文件链接数】【属主ID】【组ID】【文件大小】【创建时间:月,日,时,分】【文件名】
3.【ls filename】
函数原型
4.【ls -l filename】
1.3.3.2【touch】
【linux@ubuntu:/】
需要思考的功能:
1.打印终端命令行如何实现?
[linux@Ubuntu:当前所在目录] getcwd -> 绝对路径 -> 显示最后一部分内容
/home/linux/Desktop/dirname
2.能够接收用户的命令?ls gets -> 解析字符串获得命令及其参数touch a.txt rmdir dirname cp a.txt b.txt 3.实现对应命令?ls opendir readdir closedir ls -a opendir readdir closedir ls -l touch fopen fclose rm remove mkdir mkdir rmdir rmdir cp IO cat IO ln symlink link pwd getcwd cd chdir mv rename chmod chmod 4.命令记录写入文件 fopen fprintf fclose