#include
#include
#include
#include
#include
#include
#include
#define BUFFSIZE 1024
#define offset 10240
int 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;
}