On Mon, 16.03.2009 16:02:07 , Покотиленко Костик wrote: > В Пнд, 16/03/2009 в 14:40 +0300, Artem Chuprina пишет: > > Покотиленко Костик -> [email protected] @ Mon, 16 Mar 2009 > > 12:06:13 +0200: > > > > ПК> $ progA | ssh u...@host progB > > > > ПК> progA записывает каманду в вывод, команда улетает мгновенно в буфер > > ПК> ssh, в случае простого протокола, без подтверждения доставки progA > > ПК> будет считать команду доставленной, хотя на самом деле это ещё не > > ПК> так. > > > > Если она так думает в локальном случае, ее автора пора лечить :-) Никто > > никому никогда не гарантировал мгновенной доставки в случае с локальным > > пайпом. > > > > ПК> Кроме того часто тяжело заставить команды приходить раздельными > > ПК> порциями. > > > > Это тоже от сети не зависит. > > > > >> Потому что тогда не будет способа воспользоваться > > >> функционалом :-) > > >> > > >> Так вот, у классической юниксовой CLI-программы интерфейс рассчитан на > > >> юникс-юзера. Который ближе к разработчику, чем к энд-юзеру. И тем > > >> самым просто является таким же API, что и у библиотеки. > > > > ПК> Ну нет же. Разные они, если подробно разобраться. Учитывая > > ПК> вышесказанное, API - для низкоуровнего (производительного и > > компактного) > > ПК> программирования, > > > > Преждевременная оптимизация - корень всех зол. (c) кто-то из великих. > > > > ПК> CLI - для юникс-юзера и скриптов (по быстрому на коленке). > > > > ПК> На пример, для сбора счётчиков правил iptables можно использовать > > ПК> обёртку вокруг iptables -nvL | iptables-save типа: > > > > ПК> iptables-save | grep "<условие>" | cut -d" " -fI > > > > ПК> или такую конструкцию на Си: > > > > ПК> ... > > ПК> struct ipt_entry *ipt_e; > > ПК> char *target; > > > > ПК> for(ipt_e=iptc_first_rule(chain_name, &ipt_h); ipt_e; > > ПК> ipt_e=iptc_next_rule(ipt_e, &ipt_h)) { > > > > ПК> if(!ipt_e) { > > ПК> printf("iptc_first_rule(): returned NULL pointer\n"); > > ПК> return(NULL); > > ПК> } > > > > ПК> if(!<условие>) continue; > > > > ПК> target=iptc_get_target(ipt_e, &ipt_h); > > > > ПК> printf("Source IP: %s/%s (iface: %s), Destination IP: %s/%s > > (iface: % > > ПК> s), Target: %s, Counters: %llu bytes, %llu packets\n", > > ПК> x_strcpy(inet_ntoa(ipt_e->ip.src)), > > ПК> x_strcpy(inet_ntoa(ipt_e->ip.smsk)), > > ПК> ipt_e->ip.iniface, > > ПК> x_strcpy(inet_ntoa(ipt_e->ip.dst)), > > ПК> x_strcpy(inet_ntoa(ipt_e->ip.dmsk)), > > ПК> ipt_e->ip.outiface, > > ПК> target, > > ПК> ipt_e->counters.bcnt, > > ПК> ipt_e->counters.pcnt > > ПК> ); > > > > ПК> } > > ПК> ... > > > > ПК> Первый вариант делается за 5 минут, подойдёт для не частого сбора > > ПК> небольшого числа счётчиков. > > > > ПК> Второй вариант "страшный", пока первый раз не сделаешь. Подойдёт для > > ПК> частого сбора сотен показаний. > > > > Я бы уже задумался о том, что узкое место такой системы - не в сборе > > показаний... > > > > ПК> Дальше, если скармливать нужные счётчики и выводить их за один проход - > > ПК> можно обрабатывать теоретически неограниченное количество счётчиков за > > ПК> проход без дополнительных расходов. > > > > Это как раз автомагически получается с iptables -L. На C тебе для этого > > придется громоздить изрядную конструкцию (фактически, разрабатывать > > половину перла). Оно окупится? У меня есть сомнения... > > Уже окупилось. На системе где так работает после таких оптимизаций прогу > передающую счётчики в snmpd в top'е не видно, а snmpd иногда до 10% CPU > тратит. Следующим шагом, там от snmp откажусь в пользу самописного > демона, проблема иссякнет. > > > >> Но если этот человек может алгоритмизовать некоторый набор > > >> своих действий - он поручает его программе, и API для этого у него уже > > >> есть. > > > > ПК> Да, но это тоже, что и бегать в чугунных сапогах. > > > > Результаты профайлинга предъяви, да? > > Есть конкретный пример? С профайлингом на <Ваш любимый скриптовый > язык>... Вы бы ESR-а всё-таки почитали, а то Артёму тут уже приходится некоторые места своими словами пересказывать и те же цитаты приводить, которые там уже приведены.
-- С уважением, Тихон Тарнавский. http://linuxforum.ru http://posix.ru -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected]

