/* Exercise 13-20 and 13-21, CBD, page 467-468. Programmed by Kurt Normark aided heavily by the hints of the text book */ #include #include #define MAXLINE 200 int main(int argc, char *argv[]) { char line[MAXLINE], *pattern, *file_name; FILE *ifp; int line_numbers, n = 1; if (argc == 3) { file_name = argv[2]; line_numbers = 0; pattern = argv[1]; } else if (argc == 4 && strcmp(argv[1], "-n") == 0) { file_name = argv[3]; line_numbers = 1; pattern = argv[2]; } else { fprintf(stderr, "Calling form: search [-n] search_string file\n"); exit(1); } if ((ifp = fopen(file_name, "r")) == NULL){ fprintf(stderr, "\nCannot open %s\n\n", file_name); exit(1); } while(fgets(line, MAXLINE, ifp) != NULL){ if (strstr(line, pattern) != NULL){ if (line_numbers) printf("%3i: %s", n, line); else printf("%s", line); } n++; } fclose(ifp); return 0; }