🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#52270
Author: piecia aka dracorp
Date: Wed, 20 Jul 2011 16:25
43 lines
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
#52271
Author: Stachu 'Dozzie' K.
Date: Thu, 21 Jul 2011 09:04
22 lines
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
#52272
Author: piecia aka dracorp
Date: Thu, 21 Jul 2011 10:31
10 lines
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
#52273
Author: Stachu 'Dozzie' K.
Date: Thu, 21 Jul 2011 10:41
14 lines
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
#52274
Author: Adam Osuchowski
Date: Sun, 24 Jul 2011 14:01
33 lines
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
#52275
Author: Stachu 'Dozzie' K.
Date: Sun, 24 Jul 2011 18:01
13 lines
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