04操作系统实验_文件系统
时间:2026-01-15
时间:2026-01-15
广州大学_操作系统实验_文件系统
广州大学学生实验报告
文件管理实验 (一)简单的I/O流操作:备份文件
一、实验目的
了解简单的I/O流操作:备份文件。
二、实验内容
利用函数fopen(), fread(), fwrite(), fclose() 来实现简单的文件备份, 即将一个文件的内容拷到另一个文件中去。
三、实用程序
#include <sys/types.h>
#include <stdio.h>
#define BUF_SIZE 1024
int main(void)
{
char buf[BUF_SIZE];
FILE *source, *backup;
if(!(source=fopen("source.dat", "r"))) //以只读方式打开文件sourc.dat
{
printf("Error in opening file.\n");
exit(1);
}
if(!(backup=fopen("backup.dat", "w"))) //以只写方式打开文件backup.dat
{
printf("Error in creating file.\n");
exit(1);
}
//while(fread(buf, sizeof(buf), 1, source)==1)
unsigned long readNum = 0; //已读取字符数
while((readNum = fread(buf, sizeof(char), sizeof(buf), source))) //若读入的字符大于0,循环读写
{
广州大学_操作系统实验_文件系统
fwrite(buf, sizeof(char),readNum, backup); //写入文件
//if(fwrite(buf, sizeof(buf), 1,backup))
if (ferror(backup)) //判断是否出现写入错误
{
printf("Error in wrinting file.\n");
exit(1);
}
}
//if(ferror(source)==0)
if (ferror(source)) //判断是否读取错误
{
printf("Error in reading file.\n");
exit(1);
}
//if(!fclose(source))
if(fclose(source)) //关闭源文件流
{
printf("Error in close file.\n");
exit(1);
}
if(fclose(backup)) //关闭备份文件流
{
printf("Error in close file.\n");
exit(1);
}
return 0;
}
在程序目录创建source.dat文件,内容如下:
广州大学_操作系统实验_文件系统
编译并运行修改好的程序:
最后在桌面上的到backup.dat文件(大小与source.dat相同):
结果分析:
原代码主要错误在于fwrite和fread的使用不正确。
心得体会
这次的实验较为简单,fread(),fwrite()等的使用虽然不难,但是却容易让人犯错误。
让我懂得即使看似简单的函数,也要仔细了解其说明文档,才能避免犯”低级“错误,以免造成难以发现的bug,甚至严重后果。