Linux环境下实现copy功能

                                                                                       Linux环境下实现copy功能的程序设计

 

 

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

#define BUF_SIZE 1024

int write_fully(int fd,void *buf,int size)
{
 int total=0;
 int ret_w=0;
 while(total<size)
 {
  ret_w=write(fd,buf+total,size-total);
  if(ret_w<0)return -1;
  total+=ret_w; 
 } 
 return 0;
}


int main(int argc,char *argv[])
{
 int fd,fw;
 fd=open(argv[1],O_RDONLY);
 //fd=open(argv[1],O_CREAT|O_WRONLY|O_TRUNC,00777);
 fw=open(argv[2],O_CREAT|O_WRONLY|O_TRUNC,00777);
 if(fd<0)
 {
  fprintf(stderr,"open file faild! %s\n",strerror(errno));
  return -1; 
 }
 if(fw<0)
 {
  fprintf(stderr,"open file faild! %s\n",strerror(errno));
  return -1; 
 }
 printf("fd=%d,fw=%d\n",fd,fw);
 
 char buf[BUF_SIZE];
 int ret_r;
 
 while(1)
 {
  ret_r=read(fd,buf,BUF_SIZE-1);
  if(ret_r<0)
  {
   printf("read file error,%s\n",strerror(errno));
   return -1; 
  }
  else if (ret_r==0)
  {
   printf("read over!\n");
   break;
  }
  else
  {
   write_fully(fw,buf,ret_r);
   //buf[ret_r]='\0';
   //printf("%s",buf);
  }
 } 
 close(fd);
 close(fw);
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值