se non ricordo male le pipe sono canali monodirezionali... un processo non può leggere e scrivere contemporaneamente sulla stessa pipe... è per questo che ogni processo dovrebbe chiudere l'estremo della pipe che non usa.
Per il tuo problema devi usare due pipe e per ognuna chiudere gli estremi non usati.