[Perl] Procesos en perl

Valentin Ortiz Ferretiz vortiz@vera.net
05 Oct 2002 09:04:03 -0500


Lo que necesitas es agregar STDIN a la lista de los sockets listos para
leer o para escribir, te doy un peque=F1o ejemplo


use IO::Socket;
use IO::Select;

my $socket  =3D IO::Socket::INET -> new("$host:$port");
my $readers =3D IO::Select.>new();
$readers->add(\*STDIN); #Agregamos a STDIN
$readers->add($socket); # y al Socket

my buffer;

while (1){
  my @ready =3D $readers->can_read;
  for my $handle (@ready){
    if ($handle eq \*STDIN){ #Procesa a STDIN
      #Puedes leer
      sysread(STDIN,$buffer,1024);
      # o Puedes escribor
      syswrite($socket,$buffer);
    }

    if ($handle eq $socket){ # y tambi=E9n procesa al Socket
      sysread($socket,$buffer,1024);

      syswrite(STDOUT,$buffer,1024);
    }
  }
}


Este ejemplo es muy b=E1sico, te puede servir para lograr lo que intentas.

Saludos!.




El s=E1b, 05-10-2002 a las 00:35, H008 escribi=F3:
> hola a todos..=20
> bueno tengo un  problemita que no se como solucionarlo, lo explico=20
> a continuacion:
>=20
> el problema es que nesesito tener dos bucles corriendo al mismo tiempo
> y que las respuestas de uno de ellos no choquen con las del otro
> y que ademas las respuestas de los bucles me las muestre en la pantalla
> un ejemplo seria lo siguiente:
>=20
> while(<sock1>){chop($_);
> if ($_=3D~/mi_parametro/){print "mi respuesta\n";}
> }
>=20
> bueno como ya saben el socket al conectar queda conectado y esperando res=
puestas
> es decir el siclo no se acaba hasta que el socket se desconecte.
>=20
> el otro siclo es el siguiente
> while(<stdin>){chop($_);
> if($_=3D~/mi_comando/){print"mi_respuesta\n";}
> }
>=20
> este otro siclo queda esperando y tampoco se termina . es decir queda
> esperando hasta que le introdusca algo por teclado. y luego se repite nue=
vamente.
>=20
> AHORA... nesesito que estos 2 siclos esten trabajando paralelamente
> por que nesesito capturar en tiempo real las respuestas del socket y=20
> ademas que cuando quiera ingresarle un parametro por teclado, lo aga sin =
estropear
> el siclo del socket...
>=20
> osea la idea seria separar estos 2 siclos en 2 procesos distintos.. para =
que
> asi trabajen al mismo tiempo... y no secuencial mente..
>=20
> cual quier aporte es aceptado..
>=20
> GRACIAS
>=20
>=20
>=20
>=20
> _______________________________________________
> Perl mailing list
> Perl@tlali.iztacala.unam.mx
> http://tlali.iztacala.unam.mx/mailman/listinfo/perl
>=20
--=20
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
LSC. Valentin Ortiz Ferretiz
     Reco S.A. de C.V.
    http://reco.vera.net
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D