Itt ez a nagyszerű perl program:
#!/usr/bin/perl
while( $input=<STDIN> )
{
print uc($input);
}
Soronként olvassa STDIN-t, majd a sorokat nagybetűre konvertálva kiírja. Ha parancssorból indítom, jól működik.
Csakhogy a programot egy másik program gyerekprocesszeként akarom használni, ilyenkor az STDIN/STDOUT egy-egy pipe-ba van irányítva. Az a baj, hogy az STDIN olvasásából addig nem jön vissza, amíg a másik oldal (a szülő) le nem zárja a pipe-ot. Nekem ehelyett az kellene, hogy a child processz soronként válaszoljon.
Szerk: Ha a fenti programot kicserélem a C megfelelőjére, ami filedescriptorokon működő read() hívásokkal van megírva, akkor parent és child jól kommunikál. Sejtésem szerint az a baj, hogy a Perl fd-k helyett streameket használ.
- 1196 megtekintés
Hozzászólások
Szerintem csak egy flush hiányzik a szülő/termelő processz oldaláról, bufferelve van az adatfolyam.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
A szülő write()-tal ír, tehát nincs flush csak fsync. Nem segít. Egyébként is írtam, hogy a child-ot C programmal helyettesítve jó a kommunikáció. Tehát a Perl-ben kéne áttérni valahogy fd-s API-ra. Sajnos egyáltalán nem ismerem a Perlt.
--
CCC3
- A hozzászóláshoz be kell jelentkezni
$| = 1;
while( ... )
{
print uc($input);
}
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Kösz.
--
CCC3
- A hozzászóláshoz be kell jelentkezni
Igazából persze bonyolultabb volt a Perl program, amivel bajlódtam: a Vonyó-féle angol-magyar szótár. Ez egy text adatbázis, amit egy kis Perl programmal lehet lekérdezni, amihez most csináltam játékból egy CCC/jterminálos frontendet. Jáva futtatókörnyezet (javaws) kell hozzá.
--
CCC3
- A hozzászóláshoz be kell jelentkezni