_ RU.OS.CMP (2:5077/15.22) _________________________________________ RU.OS.CMP _
From : Igor Nikolaev 2:5030/266 Mon 26 Oct 98 23:47
Subj : Re: WINDOWS MUST DIE SOON! YРРРA ТОВАРИЩИ
________________________________________________________________________________
Alexey Gubin <Alexey_Gubin@f238.n5020.z2.fidonet.org> wrote:
> А вообще-то, если в UNIX-e все умеют писать скpипт, то в NT можно и
> уметь QB. К тому же QB гоpаздо пpоще, чем [q'`p- [@ -1 -#"foo" -bar
> или как там.
Я так понял, что начался деловой разговор с писанием скриптов.
Это уже праздник.
Я хочу привести пример простого реального скрипта на perl'е,
откомментировать его и предложить Вам quick соорудить нечто
похожее на basic'е - для того чтобы прилюдно сделать cmp
используемых os ;-)
Я надеюсь, что исходный текст, мои подробные комментарии и
выдача реального результата работы скрипта сделают этот
процесс быстрым и незатруднительным для любого пользователя
Microsoft NT, хотя бы немного знакомого с QB.
Вот полный текст скрипта:
hi.pu.ru% cat ftpstatus
#!/usr/local/bin/perl -w
open ( FW, "ps -ww -U ftp|" ) ;
while ( <FW> ) {
@_ = split;
next if ( $_[4] ne "ftpd:" );
chop ( $domain{$_[0]} = lc ($_[5]) );
$file{$_[0]} = $_[8];
}
close ( FW );
foreach $pid ( sort {
join ( '', reverse ( split ( /\./, $domain{$a} ) ) )
cmp join ( '', reverse ( split ( /\./, $domain{$b} ) ) ) }
( keys %domain ) ) {
print $domain{$pid}, ":", $file{$pid}, "\n";
}
hi.pu.ru%
Этот небольшой скрипт при помощи команды ps выясняет
у системы какие именно процессы происходят у пользователя
ftp (то есть что у нас качают фтпяторы :)
Вывод команды считывается строчка за строчкой,
split разбивает строчку по пробелам на параметры,
записывая их в массив $_[]
В скрипте используется что нулевой параметр $_[0] это
уникальный pid, пятый $_[5] - имя домена, восьмой $_[8] -
файл (или что у нас сейчас делает ftp).
Соответственно в массиве $domain{$pid} оказывается кто пришёл,
в массиве $file{$pid} - чем занимается, затем это печатается
упорядоченным по доменам.
foreach элемент ( sort {функция сортировки} ( keys массив ) )
перебирает в заданном функцией сортировки порядке индексы
указанного массива, используется для печати $domain{индекс}
и $file{индекс}.
Вот результат работы скрипта на реальной машине:
hi.pu.ru% ./ftpstatus
pc-isp-tor-uas-76-88.sprint.ca:/pub/www/music/rock/mv/a2-05.mp3
233.eclipse-soft.com:Scooter-Husterio.mp3
mail.pch.com:s0403.mp3
huggins.mps.ohio-state.edu:cu06_06.mp3
dent.ipari12-bp.sulinet.hu:nn11_12.mp3
1cust195.tnt6.lax3.da.uu.net:/incoming/rem/Man_on_the_moon.mp3
kamyk.intersoft.tarnow.pl:(ftpd)
ssb.barrt.ru:13.mp3
gs1820.ws.pu.ru:/FreeBSD/3.0-RELEASE/bin/bin.ca
hq.icb.chel.su:cu08_15.mp3
abyss.itl.net.ua:9.mp3
dial-up-73.eurocom.od.ua:nn09_04.mp3
hi.pu.ru% wc ftpstatus
15 84 406 ftpstatus
hi.pu.ru%
Вас не затруднит написать *функциональный* аналог этих
пятнадцати строчек на QB или на любом ином поставляемом
с Microsoft NT языке, функционально ему аналогичном?
Иначе говоря, нужно вывести отсортированный по доменам
список народу. Если Вам сложно взять активных ftp
пользователей, возьмите что-то другое, например просто
к-л файл с десятком доменов.
Пример, приведённый мной совершенно работоспособен, можно
не выдумывать ничего нового и просто взять готовый алгоритм.
Я надеюсь, что Вы не затратите много времени и Ваш код
также будет понятен и компактен ;-)
> Wbr, Alex
--
Игорь Hиколаев
--- ifmail v.2.12.os.sensi * Origin: Жду привета, как SYN RST пакета (2:5030/266@fidonet)