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]