zoukankan      html  css  js  c++  java
  • 经典拷贝文件代码

    #include<unistd.h>
    #include<fcntl.h>
    #include<stdio.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<errno.h>
    #include<string.h>


    #define BUFFER_SIZE 1024

    int main(int argc,char **argv)
    {
    int from_fd,to_fd;
    int bytes_read,bytes_write;
    char buffer[BUFFER_SIZE];
    char *ptr;
    if(argc!=3)
    {
    fprintf(stderr,"Usage:%s from file to file\n",argv[0]);
    exit(1);
    }
    //打开源文件
    if((from_fd=open(argv[1],O_RDONLY)==-1)
    {
    fprintf(stderr,"Open %s Error:%s\n",argv[1],strerror(errno));
    exit(1);
    }
    //创建目标文件
    if((to_fd=open(argv[2],O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR)==-1)
    {
    fprintf(stderr,"Open %s Error:%s\n",argv[2],strerror(errno));
    exit(1);
    }
    //经典拷贝文件的代码
    while(bytes_read=read(from_fd,buffer,BUFFER_SIZE))
    {
    //一个致命的错误发生
    if((bytes_read==-1)&&(errno!=EINTR))
    break;
    else if(bytes_read>0)
    {
    ptr=buffer;
    while(bytes_write=write(to_fd,ptr,bytes_read))
    {
    //一个致命的错误发生
    if((bytes_write==-1)&&(errno!=EINTR))
    break;
    //写完所有读的字节
    else if(bytes_write==bytes_read)
    break;
    //只写一部分,继续写
    else if(bytes_write>0)
    {
    ptr+=bytes_write;
    bytes_read-=bytes_write;
    }
    }
    //写的时候发生致命的错误
    if(bytes_write==-1)
    break;
    }
    }

    close(from_fd);
    close(to_fd);
    exit(0);
    }

  • 相关阅读:
    打印螺旋矩阵
    关于矩阵的操作
    最大公约数和最小公倍数
    将一个十进制数转化为16进制数
    打印菱形
    DEDECMS织梦全站动态化访问(包括自由列表freelist)及发布内容时自动动态化设置
    单例模式2014/3/27
    模式2014/3/26
    写一些体会2014/3/25
    推荐大家一本学习php模式的书
  • 原文地址:https://www.cnblogs.com/sherlockhomles/p/3088984.html
Copyright © 2011-2022 走看看