Модераторы: ginnie, korob2001
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ПЕРЛ, чтение файлов и сокетов, проблема с построчным чтением из сокета 
:(
    Опции темы
procool
Дата 31.5.2002, 08:47 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Привет.

пишу скрипт, который открывает unix-сокет с заданным именем, читает
из него построчно данные и пишет в файл. Причем именно построчно, вариант
@data = <SOCK>
не подойдет, потому что в сокет пишут данные быстро и он не кончается.
Можно в скрипте сделать переменную - сколько строк он будет считывать.

Вот в этом и вопрос.. Как осуществить построчное чтение из сокета???
  Вверх
Unregistered
Дата 13.1.2004, 09:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











ну я сто лет назад понял уже что надо делать через seek:)
  Вверх
acp
Дата 13.1.2004, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 4.2.2003
Где: Владимир

Репутация: нет
Всего: 2



Цитата
Как осуществить построчное чтение из сокета

А что мешает самому интерпретировать входные данные как строки?
То есть, обнаружил символ окончания строки и вперёд...

Цитата
ну я сто лет назад понял уже что надо делать через seek:)

Можешь сказать - как? smile.gif
PM WWW ICQ   Вверх
Бекетов Роман aka Yaiu
Дата 14.1.2004, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 14.1.2004

Репутация: нет
Всего: 1



Вот пример из perldoc
Код

#!/usr/bin/perl -w

use Socket;
use strict;
my ($rendezvous, $line);

$rendezvous = shift || '/tmp/catsock';
socket(SOCK, PF_UNIX, SOCK_STREAM, 0)|| die "socket: $!";
connect(SOCK, sockaddr_un($rendezvous))|| die "connect: $!";

while (defined($line = <SOCK>)) {
   print $line;
}
exit;  

PM MAIL   Вверх
procool
Дата 25.4.2004, 06:53 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Читаем из сокета:

Код
-bash-2.05b$ cat db
#!/usr/bin/perl -w
use Socket;
use POSIX qw(BUFSIZ setsid EWOULDBLOCK);


my $data_send = '';
for(@ARGV){$data_send .= $_." ";}
$data_send =~ s/^\s+//;
$data_send =~ s/\s+$//;
$data_read = '';
$uauth_socket_name = "/tmp/some.socket";

my $maxlen = 1000024;
my $flags  = 0;

print "operning socket...\n";
           socket(AUTHSERV, PF_UNIX, SOCK_STREAM, 0);
print "connecting to socket $uauth_socket_name\n";
           connect(AUTHSERV, sockaddr_un($uauth_socket_name)) || die("cannot con                                                                                     nect to $uauth_socket_name");
print "sending info to $uauth_socket_name: \n$data_send\n";
           send (AUTHSERV, $data_send, 0); # ÏÔÐÒÁ×ÌÑÀ ÐÅÒÅÍÅÎÎÕÀ Ó ÚÁÐÒÏÓÏÍ ÓÅÒ                                                                                     ×ÅÒÕ...
print "reading the answer...\n";
print "the answer is:\n";
        my $newdata = 1;
       while ($newdata) { my $tmp_data = ""; # читаем пока в сокете  хоть что-то есть...
           recv(AUTHSERV, $tmp_data, $maxlen, $flags);
           if (!$tmp_data) { $newdata = 0; }
           $data_read .= $tmp_data;
           print $tmp_data;
       }
print "\n===========================\nclosing socket $uauth_socket_name...\n";
close (AUTHSERV); # ÚÁËÒÙÌ ÓÏËÅÔ...
print "quit...\n";
-bash-2.05b$


Воть. думаю всё понятно.. как нить через пол годика зайду, посмотрю может что ответитеsmile.gif удачи)
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: Системное программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к системному программированию на Perl
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0424 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.