Hi Jay, You can look to see if you are working on a tty device,
in c: isatty(fd), with perl I've read "-t /dev/fname" may work,
or there is a POSIX::isatty(). So I'd suggest:
if (-t STDIN) {
# its a tty device
# do funky calls to turn off line buffering and echo.
# check out POSIX:Termios as one way to do this.
}
&do_your_io;
if (-t STDIN) {
# maybe restore it settings.
}
On Thu, Oct 23, 2003 at 02:03:50PM -0500, Austad, Jay wrote:
> I have this portion of code in a perl script:
> #!/usr/bin/perl
> #
> open(TTY, "+</dev/tty") or die "no tty: $!";
> system "stty -echo cbreak </dev/tty >/dev/tty 2>&1";
>
> When I run it from the command line, it works fine. However, when I pipe
> data into the script or run it through inetd, I get the following error:
>
> [root at myhost /]# telnet localhost 24
> Trying 127.0.0.1...
> Connected to localhost.
> Escape character is '^]'.
> no tty: Device not configured at /usr/sbin/spoof.pl line 4.
> Connection closed by foreign host.
> [root at myhost /]#
>
> Apparently this is because there is no controlling terminal when I use a
> pipe or use inetd. How do I trick it into thinking there is a controlling
> terminal? Can I start the perl script through some other trickery, like
> "bash -i -c /usr/sbin/myscript.pl"? (this didn't work btw)
>
> The reason I'm using the above, is I need to read input coming in character
> by character. Someone mentioned awhile back that screen had some trickery
> that you could use to get around this. But I can't find any info. Any
> solutions?
>
> -jay
_______________________________________________
TCLUG Mailing List - Minneapolis/St. Paul, Minnesota
http://www.mn-linux.org tclug-list at mn-linux.org
https://mailman.real-time.com/mailman/listinfo/tclug-list