美文网首页
使用系统调用方式实现文件拷贝

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

作者: 静等凌风 | 来源:发表于2016-01-25 13:33 被阅读0次

    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);

    }

    相关文章

      网友评论

          本文标题:使用系统调用方式实现文件拷贝

          本文链接:https://www.haomeiwen.com/subject/qbtdkttx.html