热门专题:行业资讯
C实现文件拷贝
作者:IT社区   发布日期:   2010-05-15来源: 字号: [] [] []
简 介:
#include
#include
#include
#include
#include
#include
#include
#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 fromfile tofilena",argv[0]);
 exit(1);
}
/*打开源文件*/
if((from_fd = open(argv[1],O_RDONLY)) == -1)
{
 fprintf(stderr,"Open %s Error: %sn",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: %sn",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);
}

// 用户登录
百容建站 - google - 百度
共同关注 - 网页制作 - 行业资讯 - 图文资讯 - 关于我们
模版制作电话:15939900631
Copyright © 2010-2012 www.yugps.cn, All Rights Reserved Powered by SiteServer CMS