n掌握C库函数对文件操作
n掌握C库函数的常用函数文件访问用法
1.2实验内容
n使用C库函数方式实现文件拷贝功能
n编写程序,从待拷贝的文件中逐步读出数据到缓冲区,在把缓冲区的数据逐个写入到新创建的文件中,完成对原文件的拷贝工作
n对应代码流程图。
n进入实验代码目录lab9,根据下图参考代码编写filecp2.c程序
$vim filecp2.c
1、编写好后如下图所示:
2、用gcc编译filecp2.c文件,输入命令:$gcc filecp2.c –o filecp2
生成可执行文件filecp2
3、运行应用程序,如下图所示,将filecp2.c文件复制为test2.c,然后用diff命令
比较两个文件的内容是否一样,一样则说明拷贝正确。
//功能描述:该程序用C库函数方式通过从待拷贝的文件中逐步读出数据到缓冲区,再把缓冲区的数据逐个写入到新创建的文件中,完成对原文件的拷贝
#include
#include
#include
#include
#define BUFFER_SIZE 1024
intmain(intargc,char**argv)
{
FILE*from_fd;
FILE*to_fd;
longfile_len=0;
charbuffer[BUFFER_SIZE];
//判断入口参数
if(argc!=3)
{
printf("Usage:%sfromfile
tofile\n",argv[0]);
exit(1);
}
//打开源文件
if((from_fd=fopen(argv[1],"rb"))==NULL)
{
printf("Open %s
Error\n",argv[1]);
exit(1);
}
//创建目的文件
if((to_fd=fopen(argv[2],"wb"))==NULL)
{
printf("Open %s
Error\n",argv[2]);
exit(1);
}
//测文件大小
fseek(from_fd,0L,SEEK_END);
file_len=ftell(from_fd);
fseek(from_fd,0L,SEEK_SET);
printf("form file
size is %d\n",file_len);
//文件拷贝
while(!feof(from_fd))
{
fread(buffer,BUFFER_SIZE,1,from_fd);//读文件
if(BUFFER_SIZE>=file_len)
{
fwrite(buffer,file_len,1,to_fd);
}
else
{
fwrite(buffer,BUFFER_SIZE,1,to_fd);//写文件
file_len-=BUFFER_SIZE;
}
bzero(buffer,BUFFER_SIZE);//清空buffer
}
fclose(from_fd);
fclose(to_fd);
exit(0);
}
�pQn�i�