Thread View: pl.comp.lang.perl
6 messages
6 total messages
Started by piecia aka dracorp
Wed, 20 Jul 2011 16:25
Zapis do fifo
Author: piecia aka dracorp
Date: Wed, 20 Jul 2011 16:25
Date: Wed, 20 Jul 2011 16:25
43 lines
2017 bytes
2017 bytes
Witam
To co chcę w sumie działa ale prosiłbym o wytłumaczenie dlaczego.
Na początku tworzę fifo i otwieram ją(die dla uproszczenia pomijam):
#v+
mkfifo($fifo_file,0770);
open($fifo_fh, "+<$fifo_file");
#v-
Potok nazwany jest mi potrzebny do sterowania mplayera. W pewnym miejscu
uruchamiam mplayer:
#v-
$fork = fork;
if(defined $fork){
if($fork == 0){
exec("mplayer -input file=$fifo_file -loop 0 $url -idle");
}
}
#v-
I aby teraz sterować mplayerem wystarczy pisać do fifo ale z poziomu
skryptu działa np. to:
#v+
`echo "pause" > $fifo_file`;
#v-
a nie działa to:
#v+
print $fifo_fh "pause\n";
#v-
Aczkolwiek przy uruchomionym skrypcie testowałem printa bezpośrednio z
terminala tj:
#v-
perl -e 'open($fifo_fh,"+</tmp/radiod.piecia.fifo"); print $fifo_fh "pause
\n"; close $fifo_fh;'
#v+ i stąd działało.
Pytanie dlaczego?
Przy okazji dlaczego dla trybu ">" przy otwieraniu fifo blokuje mi
skrypt? Przy czym dla ostatniego przykładu nieważne czy dam ">" czy
"+<"(lub "+>") to nie blokuje.
Z góry dziękuje za odpowiedzi.
--
piecia aka dracorp
pisz na: piotr kropka rogoza at wp kropka eu
Re: Zapis do fifo
Author: Stachu 'Dozzie' K.
Date: Thu, 21 Jul 2011 09:04
Date: Thu, 21 Jul 2011 09:04
22 lines
1785 bytes
1785 bytes
On 2011-07-20, piecia aka dracorp <imie.nazwisko@wp.eu> wrote: [...] > I aby teraz sterować mplayerem wystarczy pisać do fifo ale z poziomu > skryptu działa np. to: > #v+ > `echo "pause" > $fifo_file`; > #v- > a nie działa to: > #v+ > print $fifo_fh "pause\n"; > #v- [...] > Przy okazji dlaczego dla trybu ">" przy otwieraniu fifo blokuje mi > skrypt? Przy czym dla ostatniego przykładu nieważne czy dam ">" czy > "+<"(lub "+>") to nie blokuje. A czytałeś cokolwiek o FIFO? Na przykład Linux Programmer's Guide? Bo mnie się wydaje że nic. -- Secunia non olet. Stanislaw Klekot
Re: Zapis do fifo
Author: piecia aka dracorp
Date: Thu, 21 Jul 2011 10:31
Date: Thu, 21 Jul 2011 10:31
10 lines
1336 bytes
1336 bytes
Dnia Thu, 21 Jul 2011 09:04:03 +0000, Stachu 'Dozzie' K. napisał(a): > A czytałeś cokolwiek o FIFO? Na przykład Linux Programmer's Guide? > Bo mnie się wydaje że nic. Prawdę mówiąc nie za bardzo. Już na wstępie LPG zauważyłem, że moja wiedza w tej kwestii jest zbyt uboga. -- piecia aka dracorp pisz na: piotr kropka rogoza at wp kropka eu
Re: Zapis do fifo
Author: Stachu 'Dozzie' K.
Date: Thu, 21 Jul 2011 10:41
Date: Thu, 21 Jul 2011 10:41
14 lines
1702 bytes
1702 bytes
On 2011-07-21, piecia aka dracorp <imie.nazwisko@wp.eu> wrote: > Dnia Thu, 21 Jul 2011 09:04:03 +0000, Stachu 'Dozzie' K. napisał(a): > >> A czytałeś cokolwiek o FIFO? Na przykład Linux Programmer's Guide? >> Bo mnie się wydaje że nic. > Prawdę mówiąc nie za bardzo. Już na wstępie LPG zauważyłem, że moja > wiedza w tej kwestii jest zbyt uboga. To poczytaj LPG zanim wrócisz z kolejną zagadką dotyczącą Linuksa. Sam zobaczysz ile oszczędzisz sobie pytań. -- Secunia non olet. Stanislaw Klekot
Re: Zapis do fifo
Author: Adam Osuchowski
Date: Sun, 24 Jul 2011 14:01
Date: Sun, 24 Jul 2011 14:01
33 lines
1734 bytes
1734 bytes
piecia aka dracorp wrote: > I aby teraz sterować mplayerem wystarczy pisać do fifo ale z poziomu > skryptu działa np. to: > #v+ > `echo "pause" > $fifo_file`; > #v- > a nie działa to: > #v+ > print $fifo_fh "pause\n"; > #v- > Aczkolwiek przy uruchomionym skrypcie testowałem printa bezpośrednio z > terminala tj: > #v- > perl -e 'open($fifo_fh,"+</tmp/radiod.piecia.fifo"); print $fifo_fh "pause > \n"; close $fifo_fh;' > #v+ i stąd działało. > Pytanie dlaczego? Perl wewnętrznie tworzy bufory dla każdego otwartego uchwytu i domyślnie nie są one automatycznie opróżniane po każdym zapisie. Dołóż na początku skryptu: use IO::Handle; a po otwarciu fifo: autoflush $fifo_fh; > Przy okazji dlaczego dla trybu ">" przy otwieraniu fifo blokuje mi > skrypt? Przy czym dla ostatniego przykładu nieważne czy dam ">" czy > "+<"(lub "+>") to nie blokuje. Jesteś pewien, że blokuje się na samym otwieraniu, tj. na syscallu open()?
Re: Zapis do fifo
Author: Stachu 'Dozzie' K.
Date: Sun, 24 Jul 2011 18:01
Date: Sun, 24 Jul 2011 18:01
13 lines
1646 bytes
1646 bytes
On 2011-07-24, Adam Osuchowski <someone@somewhere.com> wrote: >> Przy okazji dlaczego dla trybu ">" przy otwieraniu fifo blokuje mi >> skrypt? Przy czym dla ostatniego przykładu nieważne czy dam ">" czy >> "+<"(lub "+>") to nie blokuje. > > Jesteś pewien, że blokuje się na samym otwieraniu, tj. na syscallu open()? Ja jestem pewien że mu się blokuje na open(). Zdziwiłbym się gdyby było inaczej. Weź poprawkę na to że to FIFO. -- Secunia non olet. Stanislaw Klekot
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads