home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource5 / 359_01 / merge.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-10-24  |  1.0 KB  |  62 lines

  1. #include <stdio.h>
  2.  
  3. #include <fcntl.h>
  4.  
  5.  
  6.  
  7. #ifndef O_BINARY
  8.  
  9. #define O_BINARY 0
  10.  
  11. #endif
  12.  
  13.  
  14.  
  15. usage()
  16.  
  17. {
  18.  
  19.   fprintf(stderr,"Usage: merge [inputBase] [outputFile]\n");
  20.  
  21.   fprintf(stderr, "reads <inputBase>.000, <inputBase>.001, etc\n");
  22.  
  23.   exit(1);
  24.  
  25. }
  26.  
  27.  
  28.  
  29. p_open(ob, p)
  30.  
  31. char *ob;
  32.  
  33. int p;
  34.  
  35. {
  36.  
  37.   char partname[1024];
  38.  
  39.   sprintf(partname, "%s.%03d", ob, p);
  40.  
  41.   return open(partname, O_RDONLY|O_BINARY);
  42.  
  43. }
  44.  
  45.  
  46.  
  47. main(argc, argv)
  48.  
  49. int argc;
  50.  
  51. char **argv;
  52.  
  53. {
  54.  
  55.   char buf[4096];
  56.  
  57.   long chunksize, r;
  58.  
  59.   int partnum;
  60.  
  61.   int outf, f;
  62.  
  63.   
  64.  
  65.   if (argc != 3)
  66.  
  67.     usage();
  68.  
  69.  
  70.  
  71.   outf = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
  72.  
  73.   if (outf < 0)
  74.  
  75.     usage();
  76.  
  77.  
  78.  
  79.   partnum = 0;
  80.  
  81.   f = p_open(argv[1], partnum);
  82.  
  83.   while (1)
  84.  
  85.   {
  86.  
  87.     r = read(f, buf, 4096);
  88.  
  89.  
  90.  
  91.     if (r <= 0)
  92.  
  93.     {
  94.  
  95.       close(f);
  96.  
  97.       partnum++;
  98.  
  99.       f = p_open(argv[1], partnum);
  100.  
  101.  
  102.  
  103.       if (f < 0)
  104.  
  105.       {
  106.  
  107.         close(outf);
  108.  
  109.         exit(0);
  110.  
  111.       }
  112.  
  113.     }
  114.  
  115.     
  116.  
  117.     write(outf, buf, r);
  118.  
  119.   }
  120.  
  121. }
  122.  
  123.