00001
00002
00003
00004
00005
00006 #include <stdio.h>
00007 #include <syscall.h>
00008
00009 int
00010 main (int argc, char *argv[])
00011 {
00012 int in_fd, out_fd;
00013
00014 if (argc != 3)
00015 {
00016 printf ("usage: cp OLD NEW\n");
00017 return EXIT_FAILURE;
00018 }
00019
00020
00021 in_fd = open (argv[1]);
00022 if (in_fd < 0)
00023 {
00024 printf ("%s: open failed\n", argv[1]);
00025 return EXIT_FAILURE;
00026 }
00027
00028
00029 if (!create (argv[2], filesize (in_fd)))
00030 {
00031 printf ("%s: create failed\n", argv[2]);
00032 return EXIT_FAILURE;
00033 }
00034 out_fd = open (argv[2]);
00035 if (out_fd < 0)
00036 {
00037 printf ("%s: open failed\n", argv[2]);
00038 return EXIT_FAILURE;
00039 }
00040
00041
00042 for (;;)
00043 {
00044 char buffer[1024];
00045 int bytes_read = read (in_fd, buffer, sizeof buffer);
00046 if (bytes_read == 0)
00047 break;
00048 if (write (out_fd, buffer, bytes_read) != bytes_read)
00049 {
00050 printf ("%s: write failed\n", argv[2]);
00051 return EXIT_FAILURE;
00052 }
00053 }
00054
00055 return EXIT_SUCCESS;
00056 }