portable coproccesses, openpty, forkpty?

Joshua Oreman oremanj at webserver.get-linux.org
Thu May 29 15:44:15 PDT 2003

On Thu, May 29, 2003 at 07:01:21PM +0200 or thereabouts, Gabriel Ambuehl seemed to write:
> Hi,
> ok maybe I'm offtopic here, if so please excuse me ;-).
> I need to implement a coprocess feature (a.stdin gets fed to b.stdin
> and b.stdout becomes a.stdin, so basically replacing stdin with
> a processed version thereof). Now the most obvious approach would be
> to use pipes to redirect stdin/stdout of the two processes but
> unfortunately, Stevens' Advanced Programming in the UNIX environment
> notes that this will result in deadlocks if stdio is used. And as I
> tend to trust Stevens on such issues, I went looking further in the
> book and he says the only way to do totally transparent coprocesses is
> with ptys.
> Now as I understand it, BSD and SysV use different syntax to get ptys
> and so I'm wondering how to implement coprocesses in a portable way (on
> FreeBSD, it seems easy, forkpty does most of the work I need it to do
> but is it portable? Doesn't seem to be POSIX).
> I'd appreciate any comments, pointers, RTFM's, code snippets, whatever.

Yep, forkpty()/openpty() is definitely not POSIX. (Under FBSD, you have
to #include <libutil.h> and link with -lutil to use it.) However, the
source code of forkpty() and openpty() is in /usr/src/lib/libutil/pty.c,
and you could put that file in your program's directory, and link with a
simplified version of that (but you might have to change the function
names). Then you would be portable (hopefully :-)

-- Josh

> TIA & regards,
> Gabriel
> _______________________________________________
> freebsd-questions at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-questions
> To unsubscribe, send any mail to "freebsd-questions-unsubscribe at freebsd.org"

More information about the freebsd-questions mailing list