If WTRFH begins with ``<&'', then WTRFH will be closed in the parent, and the child will read from it directly. If RDRFH or ERRFH begins with ``>&'', then the child will send output directly to that file handle. In both cases, there will be a dup(2) instead of a pipe(2) made.
If you try to read from the child's stdout writer and their stderr writer, you'll have problems with blocking, which means you'll want to use select(), which means you'll have to use sysread() instead of normal stuff.
All caveats from open2() continue to apply. See open2 for details.