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