Re: forkpty with streams

From: Andrew Barton (andrevv@users.sourceforge.net)
Date: Fri Jul 25 2003 - 05:59:04 EST


On Fri, 2003-07-25 at 15:27, Andries Brouwer wrote:
> On Thu, Jul 24, 2003 at 11:28:36PM +0000, Andrew Barton wrote:
>
> > I've got the 2.4 kernel, and I'm trying to use the forkpty() system call
>
> forkpty is not a system call
>
> > with the standard I/O stream functions. The calls to forkpty() and
> > fdopen() and fprintf() all return successfully, but the data never seems
> > to get to the child process.
>
> > pid = forkpty (&fd, 0, 0, 0);
> > if (pid == 0) {
> > execlp ("sh", "sh", (void *)0);
> > } else {
> > F = fdopen (fd, "w");
> > fprintf (F, "exit\n");
> > fflush (F);
> > wait (0);
> > }
>
> Let me see. Your sh gets input from this pseudotty and sends its
> output there again. But you never read that filedescriptor.
> No doubt things will improve if you let the parent read from fd.
>
> Andries

Before I tried using streams, I just used write() to communicate with
the ptty, but I had the same problem. I found that if I put a read()
call before and after the write(), it worked. But why? Is this some kind
of I/O voodoo? How does the reading affect the writing?

You mentioned that things would improve if I let the parent read from
fd. Will this work using streams? I have tried opening fd in "r+" mode,
but in that case I end up reading my own data. Do I need to lay an
fflush() somewhere inbetween? What is it exactly that causes the data to
be sent to the parent?

I appreciate the help.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Jul 31 2003 - 22:00:26 EST