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

  • 相关阅读:
    学生管理系统简化版
    图形用户界面编程——事件驱动编程
    图形界面编程
    集合框架
    多线程编程
    反射
    相关类
    异常(4.13)
    接口
    锁!代码锁
  • 原文地址:https://www.cnblogs.com/sherlockhomles/p/3088984.html
Copyright © 2011-2022 走看看