Philip Guenther <guenther <at> gmail.com> writes:

> On Tue, Jan 7, 2014 at 8:23 AM, Theo de Raadt <deraadt <at>
cvs.openbsd.org> wrote:
> > What you need to instead is wrap all this in a way which keeps the
> > tty open
> >
> >     (
> >         stty 9600 sane parenb -parodd crtscts cs7 igncr
> >         do your IO loop
> >     ) </dev/ttyU0 0>&1 0>&2
> >
> > Something like that.
> 
> I think the desired redirections on the subshell-close would make that
> last line:
>         ) <>/dev/ttyU0 >&0
> 
> ("open /dev/ttyU0 read-write as stdin, and then dup that to stdout")

Thank you for the responses. I sort of figured out that the stty settings
are set to default each time the device is opened, but now that's confirmed
I ran into the problem that open() does not seem to be returning.

I created the following simple shell script:

#!/bin/sh

( stty 9600 sane parenb -parodd crtscts cs7 igncr
while read line
do
echo $line
done
) <>/dev/ttyU0 >&0

Running it results in no output at all, without the prompt coming back.
Interrupting the process results in the following ktrace snippet:

   486 sh       1389125130.342774 CALL  
open(0x208ee2c50,0x202<O_RDWR|O_CREAT>,0x1b6<S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP
|S_IROTH|S_IWOTH>)
   486 sh       1389125130.342776 NAMI  "/dev/ttyU0"
   486 sh       1389125151.417307 PSIG  SIGINT caught handler=0x4214f0 
mask=0<>
   486 sh       1389125151.417312 RET   open -1 errno 4 Interrupted system 
call

Looking at the timestamps, the open() only returns when I Ctrl-C the process.

The same happens with the following trivial Perl script:

#!/usr/bin/perl -w

$|=1;
open(METER,"/dev/ttyU0") or die;
print "opened terminal\n";
close(METER);


Running it produces no output without the prompt coming back, at least not
until I Ctrl-C the Perl script:

 15860 perl     1389125426.222462 CALL  open(0x12f6694a1d70,0<O_RDONLY>)
 15860 perl     1389125426.222465 NAMI  "/dev/ttyU0"
 15860 perl     1389125451.261414 PSIG  SIGINT SIG_DFL

Again, open() doesn't seem to return.

Am I doing something wrong here?

Regards,

Jurjen Oskam

Reply via email to