Return to BSD News archive
Newsgroups: comp.unix.bsd.freebsd.misc Path: euryale.cc.adfa.oz.au!newshost.anu.edu.au!harbinger.cc.monash.edu.au!simtel!news.kei.com!bloom-beacon.mit.edu!uhog.mit.edu!nntp.club.cc.cmu.edu!cantaloupe.srv.cs.cmu.edu!rochester!rit!dpc6787 From: dpc6787@cs.rit.edu (David P Cutter) Subject: Re: File Cut for a binary file Message-ID: <1995Aug8.114215.4560@cs.rit.edu> Sender: news@cs.rit.edu (USENET News Admin) Nntp-Posting-Host: arizona Organization: Rochester Institute of Technology, Rochester, NY References: <RPANCHOL.95Aug6204025@westphal.ch.intel.com> Date: Tue, 8 Aug 1995 11:42:15 GMT Lines: 154 In article <RPANCHOL.95Aug6204025@westphal.ch.intel.com> rpanchol@westphal.ch.intel.com (Ranju Pancholi -FT-~) writes: >I wish to find out if there exists routines to >cut a binary file ( around 20 Meg ) into smaller >segments of a specified size AND after transportation >to another location JOIN them back into the original >binary file ? > >thanks in advance... >-- >- Ranju > >----------------------------------------------------------------------------- >| | | >| Ranju Pancholi | email: rpanchol@sedona.intel.com | >| Intel, Corp. | Phone: (602) 554-1697 | >| 5000 W. Chandler Blvd. | | >| Chandler, AZ 85226 ! | >----------------------------------------------------------------------------- This is small enough to post it. I can't take credit for it - I've had it for a few years. -Dave /* * bsplit.c - split binary files in manageable pieces. * usage is exactly like the split program. * * This program was written from scratch, without looking at the * sources of split. * * Copyright (C) 1988 P. Knoppers * Bilderdijkhof 59 * 2624 ZG Delft * The Netherlands */ char copy0[] = "Copyright (C) 1988 P. Knoppers"; char copy1[] = "Permission to use and distribute copies of this"; char copy2[] = "program WITH SOURCE is granted to anyone, provided"; char copy3[] = "that it is NOT CHANGED in any way."; #include <stdio.h> #define DEFSIZE 50000 #define DEFPREFIX "x" #define MAXNAME 200 char *malloc (); main (argc, argv) /* bsplit - split binary file */ char *argv[]; { char *buf; char *myname; int bulksize = DEFSIZE; int level; int got; int fno = 0; char outfname[MAXNAME + 1]; char outbase[MAXNAME + 3]; int foundinname = 0; FILE * infile = stdin; FILE * outfile; myname = *argv; strcpy (outbase, DEFPREFIX); while (--argc > 0) { argv++; if ((*argv)[0] == '-') { if ((*argv)[1] == '\0') { if (foundinname != 0) { fprintf (stderr, "usage: %s [-size] [file [prefix]]\n", myname); exit (1); } foundinname++; } else if (sscanf (*argv, "-%d", &bulksize) != 1) { fprintf (stderr, "usage: %s [-size] [file [prefix]]\n", myname); exit (1); } } else if (foundinname != 0) { if (strlen (*argv) > MAXNAME) { fprintf (stderr, "%s: prefix too long\n", myname); exit (1); } strcpy (outbase, *argv); } else { if ((infile = fopen (*argv, "r")) == NULL) { fprintf (stderr, "%s: cannot open %s\n", myname, *argv); exit (1); } foundinname++; } } if ((buf = malloc (bulksize)) == NULL) { fprintf (stderr, "%s: malloc failed\n", myname); exit (1); } level = 0; while (1) { got = read (fileno (infile), &buf[level], bulksize - level); level += got; if ((level < bulksize) && (got > 0)) continue; if ((level == bulksize) || ((got == 0) && (level > 0))) { sprintf (outfname, "%s%c%c", outbase, fno / 26 + 'a', fno % 26 + 'a'); if ((outfile = fopen (outfname, "w")) == NULL) { fprintf (stderr, "%s: cannot create %s\n", myname, outfname); exit (1); } if (write (fileno (outfile), buf, level) != level) { fprintf (stderr, "%s: write failed\n", myname); exit (1); } fclose (outfile); level = 0; fno++; } if (got == 0) break; } } -- Work: dpc@grail.com (General Railway Signal Corp.) (MIME Capable) School: dpc6787@cs.rit.edu (Rochester Institute of Technology) Home: dpc@tristen.rochester.ny.us (MIME Capable) WWW: http://www.cs.rit.edu/~dpc6787/