home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / djsrc106.arj / SPLIT.C < prev    next >
C/C++ Source or Header  |  1992-04-09  |  1KB  |  85 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fcntl.h>
  4.  
  5. #ifndef O_BINARY
  6. #define O_BINARY 0
  7. #endif
  8.  
  9. usage()
  10. {
  11.   fprintf(stderr,"Usage: split [inputFile] [chunkSize] [outputBase]\n");
  12.   fprintf(stderr, "chunksize is bytes or kbytes (ex: 1440k), creates <outputBase>.000, <outputBase>.001, etc\n");
  13.   exit(1);
  14. }
  15.  
  16. p_open(ob, p)
  17. char *ob;
  18. int p;
  19. {
  20.   char partname[1024];
  21.   sprintf(partname, "%s.%03d", ob, p);
  22.   return open(partname, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
  23. }
  24.  
  25. main(argc, argv)
  26. int argc;
  27. char **argv;
  28. {
  29.   char buf[4096];
  30.   long chunksize, left, r;
  31.   int partnum;
  32.   int inf, f;
  33.   char *endp;
  34.   
  35.   if (argc != 4)
  36.     usage();
  37.  
  38.   inf = open(argv[1], O_RDONLY|O_BINARY);
  39.   if (inf < 0)
  40.     usage();
  41.  
  42.   chunksize = strtol(argv[2], &endp, 0);
  43.   if (chunksize < 1)
  44.     usage();
  45.   switch (*endp)
  46.   {
  47.     case 'k':
  48.     case 'K':
  49.       chunksize *= 1024L;
  50.       break;
  51.     case 'm':
  52.     case 'M':
  53.       chunksize *= 1048576L;
  54.       break;
  55.   }
  56.  
  57.   partnum = 0;
  58.   left = chunksize;
  59.   f = p_open(argv[3], partnum);
  60.   while (1)
  61.   {
  62.     if (left < 4096)
  63.       r = read(inf, buf, left);
  64.     else
  65.       r = read(inf, buf, 4096);
  66.     if (r <= 0)
  67.     {
  68.       close(f);
  69.       close(inf);
  70.       exit(0);
  71.     }
  72.     
  73.     write(f, buf, r);
  74.     left -= r;
  75.     
  76.     if (left == 0)
  77.     {
  78.       close(f);
  79.       partnum++;
  80.       f = p_open(argv[3], partnum);
  81.       left = chunksize;
  82.     }
  83.   }
  84. }
  85.