home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_300 / 359_01 / merge.c < prev    next >
C/C++ Source or Header  |  1991-10-24  |  1KB  |  62 lines

  1. #include <stdio.h>
  2. #include <fcntl.h>
  3.  
  4. #ifndef O_BINARY
  5. #define O_BINARY 0
  6. #endif
  7.  
  8. usage()
  9. {
  10.   fprintf(stderr,"Usage: merge [inputBase] [outputFile]\n");
  11.   fprintf(stderr, "reads <inputBase>.000, <inputBase>.001, etc\n");
  12.   exit(1);
  13. }
  14.  
  15. p_open(ob, p)
  16. char *ob;
  17. int p;
  18. {
  19.   char partname[1024];
  20.   sprintf(partname, "%s.%03d", ob, p);
  21.   return open(partname, O_RDONLY|O_BINARY);
  22. }
  23.  
  24. main(argc, argv)
  25. int argc;
  26. char **argv;
  27. {
  28.   char buf[4096];
  29.   long chunksize, r;
  30.   int partnum;
  31.   int outf, f;
  32.   
  33.   if (argc != 3)
  34.     usage();
  35.  
  36.   outf = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
  37.   if (outf < 0)
  38.     usage();
  39.  
  40.   partnum = 0;
  41.   f = p_open(argv[1], partnum);
  42.   while (1)
  43.   {
  44.     r = read(f, buf, 4096);
  45.  
  46.     if (r <= 0)
  47.     {
  48.       close(f);
  49.       partnum++;
  50.       f = p_open(argv[1], partnum);
  51.  
  52.       if (f < 0)
  53.       {
  54.         close(outf);
  55.         exit(0);
  56.       }
  57.     }
  58.     
  59.     write(outf, buf, r);
  60.   }
  61. }
  62.