thinking about it... why not just let stream() fail and let the program decide if it makes sense to continue without it? way simpler than the struct Stream bookkeeping or returning a pipe and spawning a relay process in the background. fd = open(....); /* use streaming if possible */ if((sfd = stream(fd)) >= 0) dup(sfd, fd); -- cinap