diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/CONTRIB/OR_PRACTICAL_C/13_2.c |
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/CONTRIB/OR_PRACTICAL_C/13_2.c')
-rw-r--r-- | reference/C/CONTRIB/OR_PRACTICAL_C/13_2.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/reference/C/CONTRIB/OR_PRACTICAL_C/13_2.c b/reference/C/CONTRIB/OR_PRACTICAL_C/13_2.c new file mode 100644 index 0000000..a1dd50c --- /dev/null +++ b/reference/C/CONTRIB/OR_PRACTICAL_C/13_2.c @@ -0,0 +1,70 @@ +/**************************************** + * copy -- copy one file to another. * + * * + * 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> /* ANSI Standard C file */ + +#ifdef __UNIX__ +#include <sys/types.h> /* file defines for UNIX filesystem */ +#include <sys/stat.h> +#include <fcntl.h> +#endif __UNIX__ + +#ifdef __MSDOS__ +#include <fcntl.h> /* file defines for DOS filesystem */ +#include <sys\stat.h> +#include <io.h> +#endif __MSDOS__ + +void exit(); /* lib routine */ + +#define BUFFER_SIZE (16 * 1024) /* use 16K buffers */ + +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) { + (void) fprintf(stderr, "Error:Wrong number of arguments\n"); + (void) fprintf(stderr, "Usage is: copy <from> <to>\n"); + exit(8); + } + in_file = open(argv[1], O_RDONLY); + if (in_file < 0) { + (void) fprintf("Error:Unable to open %s\n", argv[1]); + exit(8); + } + out_file = open(argv[2], O_WRONLY | O_TRUNC | O_CREAT, 0666); + if (out_file < 0) { + (void) 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) { + (void) fprintf(stderr, "Error:Read error\n"); + exit(8); + } + (void) write(out_file, buffer, (unsigned int) read_size); + } + (void) close(in_file); + (void) close(out_file); + return (0); +} |