Portál AbcLinuxu, 10. května 2025 05:28

Dotaz: Perl a pojmenovaná roura

7.1.2010 17:17 poiuz
Perl a pojmenovaná roura
Přečteno: 241×
Odpovědět | Admin
Potřebuju použít pojmenovanou rouru a pořád bojuju s neznalostí Perlu a Bashe. Nevíte proč následující kód nic nevypíše nic? Pokud dám open v subrutině input do while cyklu, funguje to. Já ale potřebuju aby proběhl jen jeden open a nevím kde je chyba. Děkuji moc za odpověď.
#!/usr/bin/perl
use IO::Handle;

system("rm pipe");
system("mkfifo pipe");

unless ($pid = fork()) {
	&input;
}else{
	&output;
}

sub input {
	$FILE = "pipe";
	open(my $log, '>>', $FILE);
	while(1){
		$log->autoflush(0);
		print $log "XXX";
	}
}

sub output {
	open (READER, "pipe");
	while(1){
		@raw_data=<READER>;
		print $raw_data[0];
	}
}
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

7.1.2010 18:39 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Perl a pojmenovaná roura
Odpovědět | | Sbalit | Link | Blokovat | Admin
race condition
In Ada the typical infinite loop would normally be terminated by detonation.
8.1.2010 12:37 ph0enix | skóre: 18 | Praha
Rozbalit Rozbalit vše Re: Perl a pojmenovaná roura
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus omezit pocet zapisu a cteni a uvidis, ze jak ctemi tak i zapis funguje, jen v nekonecne smycce to proste nepujde takto zaraz cist i psat … Co se vlastne snazis vytvorit?
use strict;
use IO::Handle;

my $pipe        = 'pipe';
my $pid;

system("rm $pipe");
system("mkfifo $pipe");

unless ($pid = fork()) {
        &input;
} else {
        &output;
}

sub input {
        my $log;
        my $count       = 10;

        open($log, '>>', $pipe) or die $!;
        $log->autoflush(0);
        while($count > 0){
                print $log "test ", $count--, "\n";
        }
        close($log);
}

sub output {
        my $line;

        open(READER, '<', $pipe) or die $!;
        while($line = <READER>){
                print $line;
        }
        close(READER);
}
8.1.2010 14:02 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: Perl a pojmenovaná roura
Pořád tam máte tu samou race condition.
In Ada the typical infinite loop would normally be terminated by detonation.
12.1.2010 16:49 Ondra
Rozbalit Rozbalit vše Re: Perl a pojmenovaná roura
Race condition tam bylo spatne, ale hlavni problem, kterej jsem s tim mel bzlo opomenuti newlineu pri zapisu do roury. Takova blbost a tolik casu jsem s tim travil :-) dekuji za pomoc!

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.