Regex vs. Piping с точки зрения скорости - PullRequest
0 голосов
/ 13 февраля 2012

Я пишу простую оболочку графического интерфейса ncurses для nmap под Linux, чтобы упростить чтение и понимание выходных данных. Однако, когда дело доходит до синтаксического анализа выходных данных, быстрее ли использовать регулярное выражение POSIX и оценивать каждое выражение в моем коде, или передавать вывод nmap в такие утилиты, как grep, sed или cut?

Например, если я хочу получить сетевые хосты в подсети, какое из следующих решений может быть лучше?

pipe = popen("nmap -sn xxx.xxx.xxx.xxx/24", "r");
if (pipe == NULL) {
    fprintf (stderr, "error creating the pipe: %s\n", strerror(errno));
    exit (1);
}

while (!feof (pipe)) {
    if (fgets (buff, BUFF_SIZE, pipe) != NULL)  {

        /* perform regex evaluations here */

        printf ("%s", buff);
    }
}

pclose (pipe);

против

pipe = popen("nmap -sn xxx.xxx.xxx.xxx/24 | grep -E 'pattern' | ...", "r");
if (pipe == NULL) {
    fprintf (stderr, "error creating the pipe: %s\n", strerror(errno));
    exit (1);
}

while (!feof (pipe)) {
    if (fgets (buff, BUFF_SIZE, pipe) != NULL)  {
        printf ("%s", buff);
    }
}

pclose (pipe);

1 Ответ

0 голосов
/ 13 февраля 2012

Сделайте свой тест.Я рекомендую использовать http://goo.gl/E3jbM для тестирования.Пожалуйста, дайте мне знать, если вам нужна помощь в тесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...