Re: Una dudilla de perl
En sáb, 2002-01-19 a 22:01, Hue-Bond escribió:
> $ cat test.pl
> #!/usr/bin/perl
> sleep (4);
> $a=<STDIN>;
>
> $ ./test.pl &
> [16] 8500
> $ # pulso enter
> $
> $
> $
> $
> $
>
> [16]+ Stopped ./test.pl
> $ _
>
> El shell detiene al script perl porque el uso de <> necesita un
> "algo" que no sé bien lo que es. Lo que quiero es saber cómo puedo
> leer una línea de un descriptor de archivo sin que el shell me
> suspenda mi script. Adicionalmente me gustaría que la función fuera
> bloqueante, o sea que la ejecución del programa al llegar a ese
> punto se detuviera esperando al usuario. read() y sysread() no me
> valen porque no leen una línea y además si no hay datos que leer,
> la ejecución del script continúa como si nada. ¿Cómo hago?
La verdad es que el programa funciona correctamente, pero no hace los
que tú quieres: pruebalo sín poner & al invocar el programa y verás que
no existe ningún problema.
Yo diría (no soy un experto en shell) que cuando tu programa que está
en background y quiere realizar una operación de interactividad con el
shell (leer de la consola) la shell lo detecta y lo pone en modo pausa.
Y te lo avísa para que tú actúes en consecuencia. (pasandolo a
foreground). Si en vez de STDIN usas otro descriptor de fichero, como un
archivo de un directorio, el programa no debe detenerse:
Algo asi:
#!/usr/bin/perl
open FICHERO, "<nombre.fich" or die "no puedo abrir";
sleep(4);
$a=<FICHERO>;
Eso lee el primer caracter. Si quieres más.........
Reply to: