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.........