grepもどき
#include <stdio.h> #include <string.h> const char *USAGE = "Useage: mygrep PATTERN [FILE]"; int open_file(FILE **fp,char *filename) { *fp = fopen(filename, "r"); if (*fp == NULL) return 0; return 1; } void search(char *pattern, char *name, FILE *fp, int flag) { char buf[256]; while (fgets(buf, sizeof(buf), fp) != NULL) { if (strstr(buf, pattern) != NULL) { if (flag) printf("%s: %s", name, buf); else printf("%s", buf); } } } int main(int argc, char *argv[]) { FILE *in_file; char *pattern; int flag = 0; if (argc < 3) { printf("%s\n", USAGE); return 1; } if (argc > 4) flag = 1; pattern = argv[1]; while (argc-- > 2) { if (!open_file(&in_file, argv[2])) { printf("mygrep: %s: No such file\n",argv[2]); continue; } search(pattern, argv[2], in_file, flag); fclose(in_file); argv++; } return 0; }
とりあえず、5分くらいで作ったgrepもどきを載せてみる。
本当のgrepにはもっと便利な機能(-iとかオプションね)がついているので、それもつけようかな~なんて思ってたけど、多分このままゴテゴテっとくっつけていくと確実に詰む(経験上)のでよーく考えてからやってみようと思います。
とりあえずオプション「i」と「v」はつけたい
こういうのは所謂「車輪の再開発」になっちゃうんだろうけど、まー勉強になるからいいかもね