Create a communication-pipe. This is normally used to make a child 
communicate to its parent. After pipe/2, 
the process is cloned and, depending on the desired direction, both 
processes close the end of the pipe they do not use. Then they use the 
remaining stream to communicate. Here is a simple example:
:- use_module(library(unix)).
fork_demo(Result) :-
        pipe(Read, Write),
        fork(Pid),
        (   Pid == child
        ->  close(Read),
            format(Write, '~q.~n',
                   [hello(world)]),
            flush_output(Write),
            halt
        ;   close(Write),
            read(Read, Result),
            close(Read)
        ).