Hola:
En http://www.geocities.com/chuidiang/ tienes tutoriales y ejemplos de colas de mensajes y de procesos.
En cuanto al pipe() es sencillo. Basta hacer algo como esto
int [2] pipa;
pipe(pipa);
if (fork() == 0)
{
// proceso hijo
close (pipa[0]);
// El hijo puede ahora enviar informacion al padre escribiendo en pipa[1] como si fuera un fichero normal (con write()).
}
else
{
// proceso padre
close (pipa[1]);
// El padre puede ahora leer informacion del hijo leyendo de pipa[0] como si fuera un fichero normal (con read()).
}
Si quieres comunicacion bidireccional, hay que abrir dos pipe() o bien sincronizar padre e hijo con semaforos para evitar que ambos escriban en pipa(1) o lean de pipa(0) a la vez.
Se bueno.