使用系统调用方式实现文件拷贝

1.1实验目的

n掌握Linux系统调用对文件操作

n掌握linux系统调用的常用函数文件访问用法

1.2实验内容

n使用系统调用方式实现文件拷贝功能

1.3步骤及现象

n编写程序,从待拷贝的文件中逐步读出数据到缓冲区,再把缓冲区的数据逐个写入到新创建的文件中,完成对原文件的拷贝工作

n对应代码流程图。

n进入实验代码目录lab9,根据下图参考代码编写filecp.c程序

$vim filecp.c

1、编写好后如下图所示:

2、用gcc编译filecp.c文件,输入命令:$gcc filecp.c –o filecp

生成可执行文件filecp

3、运行应用程序,如下图所示,将filecp.c文件复制为test.c,然后用diff命令比

较两个文件的内容是否一样,一样则说明拷贝正确。

1.4关键代码分析

//功能描述:该程序采用系统调用方式通过从待拷贝的文件中逐步读出数据到缓冲区,再把缓冲区的数据逐个写入到新创建的文件中,完成对原文件的拷贝

#include

#include

#include

#include

#include

#include

#include

#define BUFFER_SIZE 1024

intmain(intargc,char**argv)

{

intfrom_fd,to_fd;//保存文件描述符

longfile_len=0;//保存文件的总大小

intret=1;

charbuffer[BUFFER_SIZE];//定义缓存区

//判断入口参数

if(argc!=3)

{

printf("Usage:%sfromfile

tofile\n",argv[0]);

exit(1);

}

//打开源文件

if((from_fd=open(argv[1],O_RDONLY|O_CREAT))==-1)

{

printf("Open %s

Error\n",argv[1]);

exit(1);

}

//创建目的文件

if((to_fd=open(argv[2],O_WRONLY|O_CREAT))==-1)

{

printf("Open %s Error\n",argv[2]);

exit(1);

}

//获取文件大小

file_len=lseek(from_fd,0L,SEEK_END);

lseek(from_fd,0L,SEEK_SET);

printf("form file

size is %d\n",file_len);

//文件拷贝

while(ret)

{

ret=read(from_fd,buffer,BUFFER_SIZE);

if(ret==-1)

{

printf("read

Error\n");

exit(1);

}

write(to_fd,buffer,ret);//写入文件

file_len-=ret;

bzero(buffer,BUFFER_SIZE);//清空缓存区

}

printf("there are

%d byte(s)data left without copy\n",file_len);

close(from_fd);

close(to_fd);

exit(0);

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容