create an unnamed pipe pair
FD struct to receive the reading (output) end of the pipe
FD struct to receive the writing (input) end of the pipe
See Implementation
create an unnamed pipe pair