On Thu, Oct 23, 2003 at 02:39:53PM -0500, Austad, Jay wrote:
> The problem is, when called through inetd, there is no controlling tty for
> the script, so it fails.  I need to figure out how to create a controlling
> tty when calling it through inetd.

tty's are over-rated(they are so controlling!), sockets have more fun.
Try this:

#!/usr/bin/perl

use POSIX;

if (-t STDIN) {
  print "Using a tty\n";

  #  don't want to do it this way, that would be too easy!
  #  system "stty", '-icanon', 'eol', "\001";

  # save the original settings for later restore
  $org_termios = POSIX::Termios->new(STDIN);
  $org_termios->getattr();

  # turn off echo, linebuffering, man tcgetattr for details..
  $termios = POSIX::Termios->new(STDIN);
  $termios->getattr();
  $l_flag = $termios->getlflag();
  $termios->setlflag($l_flag & ~(&POSIX::ICANON) );
  $termios->setattr();
} else {
  printf("not a tty\n");
}

print "Press a key:";
$c = getc();
printf ("\nYou pressed $c\n");


if (-t STDIN) {
  # restore our tty to how we found it.
  $org_termios->setattr();
}


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