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)
).