<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Perl, fork, pipe и контроль наличия данных в pipe&apos;e</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8106.html</link>
    <description>Доброго времени суток! &lt;br&gt;&lt;br&gt;Есть вопрос, существует ли способ, узнать есть ли данные в pipe&apos;e?&lt;br&gt;&lt;br&gt;Есть скрипт, который создаёт группу child процессов, и получает от них данные через pipe.&lt;br&gt;Хочется, чтоб он продолжал работать, до тех пор, пока не посыпятся данные из pipe не останавливаясь на чтении из трубы.&lt;br&gt;&lt;br&gt;что типа:&lt;br&gt;&lt;br&gt;pipe(READ,WRITE);&lt;br&gt;WRITE-&amp;gt;autoflush(1);&lt;br&gt;&lt;br&gt;while(1) &#123;&lt;br&gt;  if(&amp;lt;READ&amp;gt;) &#123;&lt;br&gt;    do_smth($_);&lt;br&gt;  &#125; else &#123;&lt;br&gt;    do_other;&lt;br&gt;  &#125;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Такая конструкция - не работает. На if(&amp;lt;READ&amp;gt;) скрипт останавливается и ждёт данных. ;(&lt;br&gt;</description>

<item>
    <title>Perl, fork, pipe и контроль наличия данных в pipe&apos;e (bibi)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8106.html#5</link>
    <pubDate>Sat, 02 May 2009 04:20:00 GMT</pubDate>
    <description>&amp;gt;Успехов &lt;br&gt;&lt;br&gt;я хочу обработать текстовый файл, у меня есть скрипт!&lt;br&gt;&lt;br&gt;куда мне его вставит? &lt;br&gt;</description>
</item>

<item>
    <title>Perl, fork, pipe и контроль наличия данных в pipe&apos;e (angra)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8106.html#4</link>
    <pubDate>Tue, 24 Feb 2009 16:46:26 GMT</pubDate>
    <description>Основная ошибка - использование 0 в качестве таймаута. Есть разница между нулем и undef. &lt;br&gt;Учитывая что изначальный вопрос упоминал форки, даю пример для родителя и одного потомка&lt;br&gt;&lt;br&gt;#!/usr/bin/perl -w&lt;br&gt;use IO::Handle;&lt;br&gt;use IO::Select;&lt;br&gt;pipe(READ,  WRITE) or die $!;&lt;br&gt;WRITE-&amp;gt;autoflush(1);&lt;br&gt;&lt;br&gt;if (my $pid = fork) &#123;&lt;br&gt;    close WRITE;&lt;br&gt;    my $s=IO::Select-&amp;gt;new;&lt;br&gt;    $s-&amp;gt;add(&#092;*READ);&lt;br&gt;    while (1) &#123;&lt;br&gt;      if ($s-&amp;gt;can_read(0.5)) &#123;&lt;br&gt;        my $line = &amp;lt;READ&amp;gt;;&lt;br&gt;        print &quot;Child sent:$line&quot;;&lt;br&gt;        close READ;&lt;br&gt;        waitpid($pid,0);&lt;br&gt;        last;&lt;br&gt;      &#125; else &#123;&lt;br&gt;        print &quot;doing something&#092;n&quot;;&lt;br&gt;      &#125;&lt;br&gt;    &#125;&lt;br&gt;&#125; else &#123;&lt;br&gt;    die &quot;cannot fork: $!&quot; unless defined $pid;&lt;br&gt;    sleep (5);&lt;br&gt;    print WRITE &quot;Hello&#092;n&quot;;&lt;br&gt;    close WRITE;&lt;br&gt;    exit;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Успехов&lt;br&gt;</description>
</item>

<item>
    <title>Perl, fork, pipe и контроль наличия данных в pipe&apos;e (Владимир)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8106.html#3</link>
    <pubDate>Tue, 24 Feb 2009 15:42:32 GMT</pubDate>
    <description>&amp;gt;perldoc -f select &lt;br&gt;&amp;gt;perldoc IO::Select &lt;br&gt;&lt;br&gt;Мда. Что то не выходит каменный цветок. Как не пытался, сколько вариантов не пробовал, всё не работает ;( Что я делаю не так?&lt;br&gt;&lt;br&gt;#!/usr/bin/perl&lt;br&gt;&lt;br&gt;&lt;br&gt;use IO::Select;&lt;br&gt;&lt;br&gt;&lt;br&gt;pipe(READ,WRITE);&lt;br&gt;WRITE-&amp;gt;autoflush(1);&lt;br&gt;&lt;br&gt;&lt;br&gt;$select = IO::Select-&amp;gt;new();&lt;br&gt;$select-&amp;gt;add(READ); #здесь были и *READ и &#092;*READ, пробовал все варианты из примеров. Хотя шаманства этого так и не понял ;(&lt;br&gt;print WRITE &quot;Ololo&#092;n&quot;;&lt;br&gt;&lt;br&gt;if (&#064;ready = $select-&amp;gt;can_read(0)) &#123;&lt;br&gt;  $olo=&amp;lt;READ&amp;gt;;&lt;br&gt;  print &quot;$olo!!!!&quot;;&lt;br&gt;&#125; else &#123;&lt;br&gt;    print &quot;Nea&#092;n&quot;;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;&lt;br&gt;Всегда выводит Nea&lt;br&gt;</description>
</item>

<item>
    <title>Perl, fork, pipe и контроль наличия данных в pipe&apos;e (Владимир)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8106.html#2</link>
    <pubDate>Tue, 24 Feb 2009 14:26:54 GMT</pubDate>
    <description>&amp;gt;perldoc -f select &lt;br&gt;&amp;gt;perldoc IO::Select &lt;br&gt;&lt;br&gt;Спасибо ;)&lt;br&gt;</description>
</item>

<item>
    <title>Perl, fork, pipe и контроль наличия данных в pipe&apos;e (angra)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8106.html#1</link>
    <pubDate>Tue, 24 Feb 2009 12:23:27 GMT</pubDate>
    <description>perldoc -f select&lt;br&gt;perldoc IO::Select&lt;br&gt;</description>
</item>

</channel>
</rss>
