|
|
1.1 ! root 1: #include <stdio.h> ! 2: ! 3: /* Trivial example of reading a gzip'ed file or gzip'ed standard input ! 4: * using stdio functions fread(), getc(), etc... fseek() is not supported. ! 5: * Modify according to your needs. You can easily construct the symmetric ! 6: * zwrite program. ! 7: * ! 8: * Usage: zread [file[.z]] ! 9: * This programs assumes that gzip is somewhere in your path. ! 10: */ ! 11: int main(argc, argv) ! 12: int argc; ! 13: char **argv; ! 14: { ! 15: FILE *infile; ! 16: char cmd[256]; ! 17: char buf[BUFSIZ]; ! 18: int n; ! 19: ! 20: if (argc < 1 || argc > 2) { ! 21: fprintf(stderr, "usage: %s [file[.z]]\n", argv[0]); ! 22: exit(1); ! 23: } ! 24: strcpy(cmd, "gzip -dc "); /* use "gzip -c" for zwrite */ ! 25: if (argc == 2) { ! 26: strncat(cmd, argv[1], sizeof(cmd)-strlen(cmd)); ! 27: } ! 28: infile = popen(cmd, "r"); /* use "w" for zwrite */ ! 29: if (infile == NULL) { ! 30: fprintf(stderr, "%s: popen('%s', 'r') failed\n", argv[0], cmd); ! 31: exit(1); ! 32: } ! 33: /* Read one byte using getc: */ ! 34: n = getc(infile); ! 35: if (n == EOF) { ! 36: pclose(infile); ! 37: exit(0); ! 38: } ! 39: putchar(n); ! 40: ! 41: /* Read the rest using fread: */ ! 42: for (;;) { ! 43: n = fread(buf, 1, BUFSIZ, infile); ! 44: if (n <= 0) break; ! 45: fwrite(buf, 1, n, stdout); ! 46: } ! 47: if (pclose(infile) != 0) { ! 48: fprintf(stderr, "%s: pclose failed\n", argv[0]); ! 49: exit(1); ! 50: } ! 51: exit(0); ! 52: return 0; /* just to make compiler happy */ ! 53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.