实验报告
实验名: Unix 编程第一次实验
课程名: Unix 编程环境
姓名:
学号:
班级:
1
实验目的:
练习vi,使用UNIX 的系统调用和库函数,体会UNIX 文件通配符的处理方式
以及命令对选项的处理方式。
实验要求:
编程实现程序list.c,列表普通磁盘文件(不考虑目录和设备文件等),列出文
件名和文件大小。
与ls 命令类似,命令行参数可以有0 到多个
0 个参数:列出当前目录下所有文件
参数为普通文件:列出文件
参数为目录:列出目录下所有文件
实现自定义选项r,a,l,h,m 以及--
r 递归方式列出子目录
a 列出文件名第一个字符为圆点的普通文件 (默认情况下不列出文件名首字
符为圆点的文件)
l 后跟一整数,限定文件大小的最小值 (字节)
h 后跟一整数,限定文件大小的最大值 (字节)
m 后跟一整数n,限定文件的最近修改时间必须在n 天内
显式地终止命令选项
程序说明:
1) 命令选项的存储:
struct options 采用 struct options 结构存储命令的选项,flag
{ 代表有无此选项,例如aFlag 为1 就表示有 “-a”
Int aFlag, 选项,aFlag 为0 则表示没有 “-a”选项。
rFlag,lFlag,hFlag,mFlag; lPara、hPara 和mPara 用来存储”-l”、”-h”、”-m”选
long lPara,hPara; 项所带的参数。
int mPara;
};
2) 命令的读取:
struct path 采用函数getCommend 读取命令,声明一个
{ opEnd 变量用来指示选项的输入是否结束。
char* path; opEnd 初始为0,代表选项的输入没有结束,当
struct path* next; 遇到“-- “之后,opEnd 置为1,代表选项输入结
}; 束。在opEnd 为0 的时候,命令中以”- “开头
的,都认为是一个选项,在opEnd 为1 的时候,
命令中以”- “开头的则不作为选项而作为命令
的参数。
在识别选项的同时,也要读入命令的参数,命令的参数也就是文件地址,
存储在结构struct path 所组成的链表当中。在读完命令之后,需要判断一下
2
链表是否为空,如果链表是空的则代表命令中没有参数,这是需要程序自动
得把当前目录即”./“加入链表当中。
3) 选项的判断:
int judje(struct options option,struct stat info,char*fileName)
采用函数 judje 函数判断一个文件是否满足选项的要求,如果满足要求返
回1,否则返回0。
4) 选项的参数的获取:
int getPara(char* option)
采用函数getPara 获取选项所带的参数,如果参数合法则把参数转化为int 并返回,如
果参数不合法,比如参数中字母或符号等则返回-1;
5) 打印:
void listFiles(char* path,struct options option)
采用函数listFiles 打印文件,当需要递归时,把当前打印的目录和需要递
归的文件目录合并在一起传入listF