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