Dělení binárního souboru - skriptem nebo programem

Peter Cernak pcernak na naex.sk
Čtvrtek Srpen 7 01:03:36 CEST 2003


Zdravim.

Oak wrote:
> mám image soubor, potřebuji ho rozdělit na X částí. Vím, že každá část má 
> začínat na "Øÿá" (ASCII, hexd. to je "d8 ff e1") a končit před začátkem 
> další.

Skuste toto...
Nekontroluje to chybove stavy a je to napisane otrasnym stylom, ale 
fungovalo mi to :-)

-- 
Peter Cernak
------------- další část ---------------

/* kompilacia: $ gcc -W -Wall -O2 -o bsplit bsplit.c
 * pouzitie:   $ ./bsplit < filesystem.fs
 */

#include <stdio.h>
#include <string.h>

#define DELIM "\xD8\xFF\xE1"
#define DELSZ 3

#define FNAME "part%03d.jpg"

int main(void)
{
	unsigned char *delim = DELIM, tmp[DELSZ];
	char fname[32];
	int expect = 0, fidx = 0, c = 0, rv;
	FILE *of;

	do {
		snprintf(fname, sizeof(fname), FNAME, fidx);
		of = fopen(fname, "w");
		if (of == NULL) {
			perror("fopen()");
			return 2;
		}
		if (expect != 0) {
			rv = fwrite(&tmp, expect, 1, of);
			expect = 0;
		}
		while ((c = getchar()) != EOF) {
			if (c == delim[expect]) {
				tmp[expect] = c;
				expect++;
				if (expect == DELSZ)
					break;
			} else {
				if (expect == 0) {
					fputc(c, of);
				} else {
					fwrite(&tmp, expect, 1, of);
					if (c == delim[0])
						ungetc(c, stdin);
					else
						fputc(c, of);
					expect = 0;
				}
			}
		}
		fclose(of);
		fidx++;
	} while (c != EOF);
	return 0;
}


Další informace o konferenci Linux