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