Current-Users archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

problems using a pty



Hi,

For a while I have been working on an automated tester for libcurses.
What I have done is have two processes that talk to each other over a
couple of pipes and a pty - one process is the test director, it reads
a command file which is a sequence of curses routines to call, the
routines plus parameters are passed over a pipe to the slave process
which calls the curses routine with the given parameters and passes
back the return code (and possibly other returns) via another pipe to
the directory.  The pty is the stdin/stdout/stderr for the slave, the
director monitors it's end of the pty for output from the slave and
verifies this output against expected output, flagging any
differences.

I have this all functioning and can do things like create a window in
curses, write to it and perform a refresh and get the expected
output.  Doing this exercises all the pipes and the pty, they all seem
to be doing the right things.  Where things come unstuck is when I ask
curses to read input - the director can feed input down the pty, that
is fine *but* I never get data back on my pipe from the slave even
though truss is telling me the slave wrote to the pipe.  After a lot
of digging around I found that things seem to go weird when the slave
sets stdin to cbreak() mode.  If instead of doing, for example, a
getstr() curses call (which will call cbreak() in it's guts), I just
do a gets() then things work fine, the writes the slave does to the
pipe back to the master get to the master, everything is happy.  As
soon as I put a call to cbreak() before the gets() call then things
break.

I am using forkpty to create the pipe and slave process, I provide a
copy of the current terminals struct termios to the pty but the
problem still persists.  I tried gdb, that claims the slave is inside
ioctl - presumably the cbreak() call.  I have tried a couple of the
pty ioctls to see if they help like TIOCPKT and TIOCREMOTE but they
either had no effect or made things worse.

Is this a bug with pty or am I not doing something right again?

-- 
Brett Lymn
"Warning:
The information contained in this email and any attached files is
confidential to BAE Systems Australia. If you are not the intended
recipient, any use, disclosure or copying of this email or any
attachments is expressly prohibited.  If you have received this email
in error, please notify us immediately. VIRUS: Every care has been
taken to ensure this email and its attachments are virus free,
however, any loss or damage incurred in using this email is not the
sender's responsibility.  It is your responsibility to ensure virus
checks are completed before installing any data sent in this email to
your computer."




Home | Main Index | Thread Index | Old Index