ipc:half-duplex-pipe:popen()

popen() does all the dirty job of:

1> creating a pipe with pipe()
2> fork, exec, a program
3> close undesired fd
4> dup()/dup2() the stdin/stdout

however, loses the fine tuning opportunity.