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