- // linux下popen函數用法代碼:zread.c,摘自gzip例子
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
-
-
-
-
-
-
-
-
- int main(argc, argv)
- int argc;
- char **argv;
- {
- FILE *infile;
- char cmd[256];
- char buf[BUFSIZ];
- int n;
-
- if (argc < 1 || argc > 2) {
- fprintf(stderr, "usage: %s [file[.gz]]\n", argv[0]);
- exit(EXIT_FAILURE);
- }
- strcpy(cmd, "gzip -dc ");
- if (argc == 2) {
- strncat(cmd, argv[1], sizeof(cmd)-strlen(cmd));
- }
- infile = popen(cmd, "r");
- if (infile == NULL) {
- fprintf(stderr, "%s: popen('%s', 'r') failed\n", argv[0], cmd);
- exit(EXIT_FAILURE);
- }
-
- n = getc(infile);
- if (n == EOF) {
- pclose(infile);
- exit(EXIT_SUCCESS);
- }
- putchar(n);
-
-
- for (;;) {
- n = fread(buf, 1, BUFSIZ, infile);
- if (n <= 0) break;
- fwrite(buf, 1, n, stdout);
- }
- if (pclose(infile) != 0) {
- fprintf(stderr, "%s: pclose failed\n", argv[0]);
- exit(EXIT_FAILURE);
- }
- exit(EXIT_SUCCESS);
- return 0;
- }