#include #include #include #include #include extern char** environ; // ./run_grep at f1.txt f2.txt f3.txt int main(int argc, char *argv[]) { if (argc <= 2 ) { fprintf(stderr, "Usage: %s ...\n", argv[0]); return 1; } int n_processes = argc - 2; pid_t pid[n_processes]; for (int i = 0; i < n_processes; i++) { char *args[] = {"/bin/grep", "-H", argv[1], argv[i + 2], NULL}; int ret = posix_spawn(&pid[i], args[0], NULL, NULL, args, environ); if (ret != 0) { fprintf(stderr, "%s\n", strerror(ret)); return 1; } } // grep 0 matches // 1 did not // 2 error int status; int n_files_matched = 0; for (int i = 0; i < n_processes; i++) { waitpid(pid[i], &status, 0); //printf("stat %d\n", WEXITSTATUS(status)); if (WEXITSTATUS(status) == 0){ n_files_matched++; } } printf("%d files matched\n", n_files_matched); return 0; }