Mega Code Archive

 
Categories / C / Math
 

Copy one file to another

/* Practical C Programming, Third Edition By Steve Oualline Third Edition August 1997  ISBN: 1-56592-306-5 Publisher: O'Reilly */ /* Usage                                *  *      copy <from> <to>                *  *                                      *  * <from> -- the file to copy from      *  * <to>   -- the file to copy into      *  ****************************************/ #include <stdio.h> #ifndef __MSDOS__       /* if we are not MS-DOS */ #define __UNIX__        /* then we are UNIX */ #endif /* __MSDOS__ */ #include <stdlib.h>      #ifdef __UNIX__ #include <sys/types.h>  /* file defines for UNIX filesystem */ #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #endif /* __UNIX__ */ #ifdef __MSDOS__ #include <fcntl.h>     /* file defines for DOS filesystem */ #include <sys\stat.h> #include <io.h> #endif __MSDOS__ #ifndef O_BINARY #define O_BINARY 0  /* Define the flag if not defined yet */ #endif /* O_BINARY */ #define BUFFER_SIZE (16 * 1024) /* use 16K buffers */ int main(int argc, char *argv[]) {     char  buffer[BUFFER_SIZE];  /* buffer for data */     int   in_file;              /* input file descriptor */     int   out_file;             /* output file descriptor */     int   read_size;            /* number of bytes on last read */     if (argc != 3) {         fprintf(stderr, "Error:Wrong number of arguments\n");         fprintf(stderr, "Usage is: copy <from> <to>\n");         exit(8);     }     in_file = open(argv[1], O_RDONLY|O_BINARY);     if (in_file < 0) {         fprintf("Error:Unable to open %s\n", argv[1]);         exit(8);     }     out_file = open(argv[2], O_WRONLY|O_TRUNC|O_CREAT|O_BINARY, 0666);     if (out_file < 0) {         fprintf("Error:Unable to open %s\n", argv[2]);         exit(8);     }     while (1) {         read_size = read(in_file, buffer, sizeof(buffer));         if (read_size == 0)             break;              /* end of file */         if (read_size < 0) {             fprintf(stderr, "Error:Read error\n");             exit(8);         }         write(out_file, buffer, (unsigned int) read_size);     }     close(in_file);     close(out_file);     return (0); }