#include #include #include #include #include bool beginswith(char * big, char * little) { for (int i=0; true; i+=1) { if (little[i] == 0) return true; if (little[i] != big[i]) return false; } } void main() { char pattern[1000], line[1000]; printf("prefix: "); fgets(pattern, 999, stdin); int len = strlen(pattern); pattern[len-1] = 0; int connect[2]; pipe(connect); int p = fork(); printf("[p=%d, i am %d]\n", p, getpid()); if (p == 0) { close(1); dup(connect[1]); execlp("ls", "ls", NULL); fprintf(stderr, "I got execlp wrong\n"); exit(1); } FILE * fin = fdopen(connect[0], "r"); while (true) { char * s = fgets(line, 999, fin); if (s == NULL) break; if (beginswith(line, pattern)) printf("match: %s", line); } int s; p = wait(& s); printf("[done, p=%d, s=%d]\n", p, s); }