#include <stdio.h>
#include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #define BUFFSIZE 1024 #define offset 10240int main(int argc,char *argv[])
{ char buf[BUFFSIZE]; int src_file,dest_file,real_read_num; /* check the input */ if(argc != 3) { fprintf(stderr,"Usage:./copy_file source_file_name dest_file_name.\n"); exit(1); } /* open source file for read only*/ src_file = open(argv[1],O_RDONLY); /* open destination file only for write,if the file is not exist,then creat and access mode is 0644 */ dest_file = open(argv[2],O_WRONLY | O_CREAT,S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); /* check open operation is success or not */ if(src_file < 0 || dest_file < 0) { perror("open"); exit(2); }/* reposition the file pointer to the specified location */
lseek(src_file,-offset,SEEK_END);/* read source file's content and write it to destination file */
while((real_read_num = read(src_file,buf,BUFFSIZE)) > 0) { if(write(dest_file,buf,real_read_num) < 0) { perror("write"); exit(3); } }close(src_file);
close(dest_file); return 0; }