Timur V. Elzhov -> debian-russian@lists.debian.org  @ Sun, 25 Sep 2005 20:28:04 
+0400:

 TVE> Мне нужно на Perl сделать что-то вроде cat, то есть читать бинарные
 TVE> данные и записывать куда-нибудь. Данных может быть очень много,
 TVE> поэтому записать их все в память, а потом записать на диск не получится.
 TVE> Делаю следующее:

 TVE> syswrite OUT, $str  while (sysread SRC, $str, 1_000_000);

 TVE> если OUT сделать псевдонимом STDOUT и шеллом перенаправить этот STDOUT
 TVE> в файл, то это работает раз в шесть-семь (!) быстрее, чем когда я явно
 TVE> открываю OUT через open(). Почему? Я неправильно выбрал размер LENGTH
 TVE> в sysread? Вообще, как наиболее эффективно организовать прямую передачу
 TVE> данных в Perl?

 TVE> Спасибо.

Вообще-то буферизованный вывод в perl делается через read/print, а не
через sysread/syswrite.  Но вот насчет "в частности" неочевидно.  Разве
что после каждого syswrite делается fsync?  Да вроде не
должно...  Может, конечно, артефакт того, что открывается через open()
(для sys* надо и открывать через sysopen), но такая возможность тоже
больше похожа на чисто теоретическую, а проверять лениво.

-- 
Artem Chuprina
RFC2822: <ran{}ran.pp.ru> Jabber: [EMAIL PROTECTED]

Все учтено могучим ураганом...


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Ответить