2012-02-12 3 views
0

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

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

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); 
+0

Я бы запустил некоторые тесты бенчмаркинга, если бы я был вами. – Eregrith

+0

Я бы оценил это, но я бы подумал, что использование regex будет быстрее, потому что это то, что эти инструменты, вероятно, будут делать в любом случае, плюс у вас есть накладные расходы, чтобы сообщить ОС, чтобы начать другой процесс, и все, что подразумевает –

+0

@Eregrith well , главная причина, почему я спросил об этом, - это то, что я никогда раньше не использовал библиотеку регулярных выражений POSIX, поэтому я бы не стал изучать что-то новое, если оно бесполезно и есть более быстрые методы. –

ответ

0

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

Смежные вопросы