该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
上机程序作成概要及要求
概要:
用C语言编制一个对一系列文件反复读写的命令行程序。
命令名称:
mkfiles
命令形式:
mkfiles [filenum=生成的文件数] [prefix=文件名的前缀]
[writesz=写入数据的size] [writecnt =写操作实行的次数]
说明:
mkfiles — 在当前文件系统上创建指定个数个文件,并以一定的内容进行填充。而后对已创建成功的所有文件的内容的正确性进行验证,待验证完成后,删除所有文件。上述动作反复操作。
选项及参数说明:
filenum — 指定生成文件的总数(1~99999)。(默认值为1)
prefix — 规定生成文件名的前缀。(默认名字是data)
writesz — 指定每次所写入数据的size。如果每次写入数据的size不是sizeof(double)的倍数的话,则根据sizeof(double)对数据size向上取整。例: sizeof(double)为8,指定writesz=11时,向上取整后的writesz的值设定为16。(默认值为4096)
writecnt — 指定上面的写操作所实行的次数。(默认值为1)
#可以任意指定上述选项的组合
举例:
①所有的选项都指定的情况
#mkfiles filenum=1000 perfix=data writesz=1023 writecnt=3
②只指定filenum,prefix选项,其他选项都为默认值
#mkfiles filenum=1000 perfix=data
③不指定任何选项,全部都为默认值
#mkfiles
文件内容:
所创建的每个文件的大小应该为writesz*writecnt。从文件头开始依次写入double型的1,2,3,……等的数字序列。但是,写操作执行时所写入数据的大小是由writesz参数指定的大小,并且该写操作实行由writecnt参数指定的次数。
文件内容的验证:
在包含上述内容的文件全部(个数是由参数filenum指定)都被创建成功后,施行下面的验证处理。
在文件的读取操作中,每次读取的数据量由writesz指定的大小来决定,并且该读取操作也要实行writecnt次。在进行内容验证时,要检查读出来double型的数字是否正确,即确认你读取的内容是否就是你在前面创建文件时写入的内容。
文件名:
文件名中要包含该文件是第几个被生成的那样的文件序号,具体形式如下:
PREFIX.YYYYY.tmp
PREFX:通过prefix指定的前缀
YYYYY:从00001开始的文件序号。最先生成的文件序号为00001,接下来是00002……依次类推,在生成的文件名中通过序号就可以知道该文件是第几个生成的。
# PREFX和YYYYY和tmp之间是用字符 . 来间隔。
错误处理:
错误内容处理
选项指定的形式不正确从stderr中输出以下信息并终止程序。
出错时间 invalid option – 用户指定敲入的选项
文件删除处理的错误忽略(不需要处理)
文件生成时的错误
1,open()错误
2,write()所要求size处理不了
3,close()错误在stderr中输出以下信息,并在暂停10分钟之后继续创建后续的文件
1,出错时间output open error, name=文件名, errno=errno
2,出错时间 write error, name=文件名, I/O len=write函数的返回值, errno=errno
3,出错时间output close error, name=文件名, errno=errno
文件读取错误
1,open()错误
2,read()所要求size处理不了
3,在确认读取内容时出错
4,close()错误在stderr中输出以下信息,并在暂停10分钟之后继续文件内容的验证处理
1,出错时间 input open error, name=文件名, errno=errno
2,出错时间 read error, name=文件名, I/Olen=read的返回值, errno=errno
3,出错时间 data error, name=文件名, expect=期望值, read=错误值, errno=errno
4,出错时间 input close error, name=文件名, errno=errno
★出错时间的输出形式为:yymmdd:hhmmss
程序运行流程
该程序要重复以下处理。
1,参数解析
2,删除以prefix为前缀的所有文件
3,创建filenum个文件(包含文件内容的填充)
4,检查filenum个文件
5,跳到第2项的处理