Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Pavel Zheltouhov                     2:5020/400     25 May 2000  20:10:35
 To : All
 Subject : Re: open2 на ASPerl под Win32. Хотя бы объясните.
 -------------------------------------------------------------------------------- 
 
 Alexander Semenov <sav@ulmen.mv.ru> wrote:
 
 > Это почти классический пример из О'Рейли. Все работает как надо.
 > (Кстати, все классические примеры из книжек работают как обещалось,
 > что наталкивает на мысль, что чего-то не понимаю я, а не
 > ASPerl/Win32).
 
 да оно всегда висло и глючило
 ситуация осложняется кривой реализацией консолей на  win95/98
 чуть что блокируются ВСЕ консольные приложения !
  в nt чуть получше (там только одно)
 
 > В приведенном примере раскоментируем единственную закоментаренную
 > строчку - все виснет - но ГДЕ? Попробуйте угадать? Hа open3. Т.е.
 > скрипт
 > пишет '12' и замолкает навеки. Я понимаю, что cat не пишет в stderr,
 > но
 > заранее то этого никто знать не может. Почему на open3 ??? Я понимаю,
 > что в open3 что-то форкается, но приведите какой- нибудь
 > правдоподобный
 > алгоритм. 
 
 на ASperl ничего не форкается
 обходятся другими вызовами
 вообще если делать все аккуратно то ничего не виснет
 главное не читать лишнего и не писать в прогу если она ничего не ожидает
 запускаемая программа тоже не должна буферизировать
 сложности возрастают если прога ошибки ложит в stderr и надо их читать
 тогда вообще фиг определишь чья сейчас очередь читать
 поэтому open2 и конвейерное открытие
  (я не смог,select не работает; еще идеи ? )
 в общем случае,если прога не хочет выфлушивать свой вывод
 то никак ее не заставишь :(
 >Еще наблюдения:
 > - под отладчиком все идет до '12345678' т.е. виснет на чтении из
 > пустого stderr,
 
 отладчик делает $|=1
 сделай и ты тоже
 (кстати работает,то есть в твоем скрипте зависает на счет 8 )
 >    что логично.
 > - под линуксом скрипт исполняется так: '12123456789AB', при этом
 > чтение
 >    из пустого stderr просто возвращает undefined. Таким образом,
 > получается,
 >    open3 исполняется дважды, а завершается успешно один раз?
 
 странно,может линуксовый cat закрывает stderr?
 
 > какие есть работающие методы этого? Пробовал через fork и Win32::Pipe,
 > но пайпы искажают информацию: в одну сторону строки кончаются
 > \x0D\x0D\x0A, в другую сторону пока не понял... binmode их не ест,
 > т.к.,
 > к файлам Win32::Pipe не имеет никакого отношения...
 
 вообще форки на ASperl совсем  недавно(только в 5.6 появились)
 
 All,как они работают? видно что через win32 threeds
 а как насчет блокировок с сокетами?
 я не разбирался но попробовал старые свои юниксовые проги
 зависает все равно
 что именно там блокируется  ?
 
 --  
  Bye,
  Pavlo
 --- ifmail v.2.15dev5
  * Origin: Demos online service (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 open2 на ASPerl под Win32. Хотя бы объясните.   Alexander Semenov   23 May 2000 09:40:02 
 Re: open2 на ASPerl под Win32. Хотя бы объясните.   Pavel Zheltouhov   25 May 2000 20:10:35 
 Re: open2 на ASPerl под Win32. Хотя бы объясните.   Alex Lazarev   26 May 2000 12:09:58 
Архивное /ru.perl/5494c6e9dc27.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional