|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Eugene Grosbein 2:5006/1 15 Mar 2007 12:11:12 To : Gennadij Pastuhov Subject : Re: com порт -------------------------------------------------------------------------------- 15 мар 2007, четверг, в 00:19 KRAST, Gennadij Pastuhov написал(а): GP> Спасибо за подсказку, нашёл в инете скрипт Витуса, который переделал под GP> себя. GP> Однако появился один косяк. который не знаю, как правильно обработать: GP> если GP> ответа из компорта долго нет, то скрипт так и висит в его ожидании. Можно GP> ли GP> как-нибудь это время ограничить? Можно. Есть куча способов, но это уже к эхотагу малое отношение имеет. Простейший способ: alarm(). Так как заблокироваться может даже open(), если nonblock не выставлять, то прямо перед ним вставь, например: alarm(10); GP> open F, "+<$port" or die $!; GP> select F; GP> $|=1; GP> select STDOUT; GP> print F "AT+CSQ\r" || die $!; GP> my $rc = <F>; GP> while (<F>) { И после каждого успешного чтения выключай таймер: alarm(0); GP> die "Modem error\n" if /^ERROR\r?$/; GP> if ($_ =~ m/\ (\d+)\,/x) { GP> $rssi = $1; GP> printf "INSERT INTO pvalues (alias, value, units) VALUES GP> ('RSSI' GP> exit (0); GP> } А перед следующим опять включай: alarm(10); GP> } GP> unlock(); Если в течение 10 секунд ничего не происходит, придет SIGALRM и даст процессу по башке. Дефолтный обработчик процесс завершит. Можно написать свой, который сделает что-то другое. Eugene -- Устав от радостных пиров, Hе зная страхов и желаний --- slrn/0.9.8.0 (FreeBSD) * Origin: Svyaz Service JSC (2:5006/1@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/26093752493e1.html, оценка из 5, голосов 10
|