grepもどき | spin on the RITZ

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」はつけたい



こういうのは所謂「車輪の再開発」になっちゃうんだろうけど、まー勉強になるからいいかもね