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」はつけたい
こういうのは所謂「車輪の再開発」になっちゃうんだろうけど、まー勉強になるからいいかもね