Usando pipe para pasar valores enteros entre padre e hijo

Estoy un poco confundido sobre cómo usar correctamente pipe () para pasar valores enteros entre dos procesos.

En mi programa primero creo un tubo, luego lo bifurco. Supongo que tengo "Dos" tubos entonces?

Por lo que entiendo, esta es mi tarea. Mi padre pasa por un bucle for que verifica un valor entero "i" para una operación determinada, aumenta una variable de conteo y guarda el valor en una matriz. Después de cada verificación, mi padre debe pasar un valor entero, "i" a mi hijo a través de una canalización. Mi hijo usa ese valor entero, verifica el valor, debería aumentar una variable de conteo y guardar el resultado en una matriz [compartida?]. Finalmente; el niño debe devolver el recuento final al padre, quien luego imprime los dos recuentos y la matriz "Compartida".

-> No estoy seguro de tener que tener una matriz compartida o guardar los resultados. Es posible que solo necesite los conteos: la tarea era ambigua y estoy esperando una respuesta del profesor. También; ¿Puedo incluso hacer una matriz compartida entre procesos? Suena como un comienzo de algún problema para mí.

-> Aquí están mis preguntas: Una; ¿Cómo uso tuberías para enteros? Solo los he visto para matrices de caracteres y las respuestas anteriores no parecen pensar que esto sea posible o legal ... No estoy seguro. No había ninguna resolución que pudiera encontrar en él.

-> ¿Cómo uso un conducto unidireccional para pasar números enteros a un niño? ¿Y que el niño devuelva algo? No estoy seguro de cómo puedo ... diferenciar las dos tuberías. Yo "sé" [o creo que sé] que tengo que cerrar una parte no utilizada de cada tubería para evitar "Algunos problemas vagos".

Lo siento por las preguntas tontas; No me han enseñado los procesos (aparte de la horquilla) o las tuberías (en absoluto) en esta clase, ¡así que no estoy muy seguro de por dónde empezar!

Aquí hay partes de mi código: no es bonito, no funciona y no espero que lo haga. Es más bien un marcador de concha. Una vez que descubra cómo usar una tubería, probablemente haga que el código tenga sentido.

int main(void)
{
int fd[2];
pid_t childpid;
pid_t parentpid;
int i;
int threecount = 0;
int fivecount = 0;;
int results [MAXSIZE];

parentpid = getpid(); //Get current process ID number

pipe(fd);
childpid = fork(); 

if(childpid == 0){
close(fd[0]); //Closing this for some other reason

}
int j = 0;

if(childpid > 0)
close(fd[1]); //Closing this for some reason


if( childpid == -1 )
{
    perror("Failed to fork\n");
    return 1;
}
if (childpid > 0)
{
    for(i = 1; i < MAXSIZE;i++)
    {
        if(i % 5 == 0)
        {
            fivecount++;
            i = results[j];
            j++; 
            wait(NULL);
        }
    }
}
else if (childpid == 0)
    {
        if(i % 3 == 0) //This i here should probably be the i value above, piped to the child
        {
            threecount++;
            i = results[j];  //This should be part of th pipe
            j++;    //Trying to keep count of that shared array, not really the right way to do it though.
        }

    }
    printf("%d  %d  \n", fivecount,threecount);
    return 0;

}

Respuestas a la pregunta(1)

Su respuesta a la pregunta