This is what I use to redirect stderr, stdout to a file from a program I start using DosStartSession. You could do the same type of thing using a pipe.
ULONG ulAction;
ULONG ulNew;
HFILE hfFile, hfNewStdOut = -1, hfNewStdErr = -1,
hfStdOut = 1, hfStdErr = 2;
// Open output file
DosOpen( szOutputFile, &hfFile, &ulAction, 1, 0,
FILE_OPEN | FILE_CREATE,
OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE, 0L );
// Duplicate handles
DosDupHandle( hfStdOut, phfNewStdOut );
DosDupHandle( hfStdErr, phfNewStdErr );
// Close existing handles for current process
DosClose( hfStdOut );
DosClose( hfStdErr );
// Redirect existing handles to new file
DosDupHandle( hfFile, &hfStdOut );
DosDupHandle( hfFile, &hfStdErr );
// Let started program inherit handles from parent
stdata.InheritOpt = SSF_INHERITOPT_PARENT;
// Start new session
DosStartSession( &stdata, &ulSessionID, &pidSession );
// Get back original handles
DosDupHandle( hfNewStdOut, &hfStdOut );
DosDupHandle( hfNewStdErr, &hfStdErr );
// Close the duplicated handles - no longer needed
DosClose( hfNewStdOut );
DosClose( hfNewStdErr );
Credit: Rick Fishman