版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、广州大学学生实验报告开课学院及实验室:计算机科学与工程实验室 2015 年12 月8日实验课程名称操作系统实验成绩实验项目名称实验4 文件系统指导老师陈康民一、实验目的1. 对文件管理有进一步了解2. 利用文件备份实验加深对文件管理的了解3. 熟悉fopen()、fread()、 fwrite()、fclose() 的使用二、实验内容利用函数fopen(), fread(), fwrite(), fclose() 来实现简单的文件备份, 即将一个文件的内容拷贝到另一个文件中去。三、实验原理利用函数fopen(), fread(), fwrite(), fclose() 来实现简单的文件备份四、
2、实验设备PC(操作系统:Fedora,含GCC)五、实验要求完成利用函数fopen(), fread(), fwrite(), fclose() 来实现简单的文件备份, 即将一个文件的内容拷贝到另一个文件中去。并进行分析参考程序提供错误解决方案。六、实验程序9.c:#include #include #include int main(void)char buf; /建立缓冲区FILE *source, *backup; /设立FILE结构指针if (source = fopen(source.dat, r) = NULL) /若以只读形式source.dat成功打开,则fopen()返回FI
3、LE指针sourceprintf(Error in opening file.n);exit(1);if (backup = fopen(backup.dat, w) = NULL) /若以只写形式backup.dat无法打开,则创建文件不成功printf(Error in creating file.n);exit(1);while (fread(&buf, sizeof(buf), 1, source) = 1) /用fread函数读取source的一个buf大小的数据到缓冲区if (fwrite(&buf, sizeof(buf), 1, backup) = 0) /用fwrite函数把
4、一个buf大小的缓冲区数据写入backup/若写入错误,则打印“写入文件错误”printf(Error in wrinting file.n);exit(1);if (ferror(source) /读取文件source出现错误 printf(Error in reading file.n);exit(1);if (fclose(source) /source流的关闭出现错误printf(Error in close file.n);exit(1);if (fclose(backup) /backup流的关闭出现错误printf(Error in close file.n);exit(1);r
5、eturn 0;9.c结果截图实验结果1:源文件source.dat内容如下: 编译运行后多了个Backup.dat文件实验分析1:此方案1,用char buf;重新定义缓冲区,程序中if (!(source = fopen(source.dat, r)和if (!(backup = fopen(backup.dat, w)中的表达式虽然没有错误,但这种写法不太好,因fopen()返回的是一个地址或者空值,这样写会影响程序的可读性,同时在某些机器上可能引发错误,所以改为if (source = fopen(source.dat, r) = NULL)和if (backup = fopen(ba
6、ckup.dat, w) = NULL)。因为将缓冲区改为char buf;,所以fread(buf, sizeof(buf), 1, source)和fwrite(buf, sizeof(buf), 1, backup)应改为fread(&buf, sizeof(buf), 1, source)和fwrite(&buf, sizeof(buf), 1, backup),同时while循环的循环体内if的条件表达式的判断也是错误的,应改为fwrite(&buf, sizeof(buf), 1, backup) = 0,后面if (ferror(source) = 0)和if (!fclose(
7、source)的判断也是错误的,应改为if (ferror(source)和if (fclose(source),具体修改的地方请查看上面实验程序1中字体加粗的部分和相应注释。此方案实际上是每次只读/写一个字节,虽然可以实现正确备份文件,但明显不能达到要求,所以进行方案2的实验。方案2 程序如下:#include #include #include #define BUF_SIZE 1024int main(void)char bufBUF_SIZE;FILE *source, *backup;if (source = fopen(source.dat, r) = NULL) /若以只读形式s
8、ource.dat成功打开,则fopen()返回FILE指针sourceprintf(Error in opening file.n);exit(1);if (backup = fopen(backup.dat, w) = NULL) /若以只写形式backup.dat无法打开,则创建文件不成功printf(Error in creating file.n);exit(1);int readbytes = 0; /存取已读取的字节数while (readbytes = fread(buf, sizeof(char), BUF_SIZE, source) 0) /若读入的字符大于0,循环读写fw
9、rite(buf, sizeof(char), readbytes, backup); /写入文件if (ferror(backup) /判断是否出现写入错误,若写入错误,则打印“写入文件错误”printf(Error in wrinting file.n);exit(1);if (ferror(source) /读取文件source出现错误 printf(Error in reading file.n);exit(1);if (fclose(source) /source流的关闭出现错误printf(Error in close file.n);exit(1);if (fclose(back
10、up) /backup流的关闭出现错误printf(Error in close file.n);exit(1);return 0;实验结果:第一次调试:第二次调试:在第一次的基础上添加内容使得源文件的内容增多,文件大小变成2.3kb实验分析2:此方案2中,仍然用char bufBUF_SIZE;定义一个1024字节大小的缓冲区,其它微小改动和方案1一致,主要修改是while循环:int readbytes = 0; /定义一个变量来存取已读取的字节数while (readbytes = fread(buf, sizeof(char), BUF_SIZE, source) 0) /*在这里,fread()函数是从一个文件流中读数据,最多读取1024个元素,也就是最多填满缓冲区,每个元素1字节,如果调用成功返回实际读取到的元素个数,如果返回值与BUF_SIZE不相同,则可能文件结尾或发生错误,可以从ferror和feof获取错误信息或检测是否到达文件结尾。对于本次实验的源文件source.dat来说,其文件大小为2320-35=2285字节,该while总共执行了3次,3次readbytes的值分别为1024/1024/和237。fwrite(buf, sizeof(char), readbytes, backup); /把已经读取的数据写入文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东佛山南海区狮山横岗幼儿园招聘笔试备考试题及答案解析
- 2026广西南宁上林三里镇人民政府招聘3人笔试模拟试题及答案解析
- 2026山东菏泽市选调公务员考试备考题库及答案解析
- 2025年池州职业技术学院单招职业适应性测试题库及答案解析
- 2026学年上海市金卫中学教师招聘笔试备考题库及答案解析
- 2026浙江衢州市龙游县创新咨询服务有限公司招聘合同制员工12人笔试备考试题及答案解析
- 2026湖北恩施高新区消防救援大队招聘政府专职消防员18人考试备考试题及答案解析
- 2025年宁夏回族自治区固原市高职单招职业技能考试试题及答案解析
- 2026年大庆市建设中等职业技术学校招聘教师笔试备考试题及答案解析
- 2026广西来宾象州县融媒体中心招聘见习人员1人考试备考题库及答案解析
- 配电类“两种人”安全规程考试题库
- 《小丑鱼的奇妙世界》大班美术活动
- 新课标初中物理词典
- 医疗质量与安全管理委员会会议专家讲座
- 川2020J146-TJ 建筑用轻质隔墙条板构造图集
- 外研版中考英语复习课件
- GB/T 7762-2003硫化橡胶或热塑性橡胶耐臭氧龟裂静态拉伸试验
- GB/T 28733-2012固体生物质燃料全水分测定方法
- PSP问题分析与解决能力训练课件
- 大学生就业权益与保护
- 住房公积金缴存基数和缴存比例确认书
评论
0/150
提交评论