Używanie potoku do przekazywania wartości całkowitych między rodzicem a dzieckiem

Jestem trochę zdezorientowany, jak poprawnie używać pipe () do przekazywania wartości całkowitych między dwoma procesami.

W moim programie najpierw tworzę fajkę, a potem ją rozwidlam. Zakładam, że mam wtedy „dwie” rury?

Z tego, co rozumiem, to jest moje zadanie. Mój rodzic przechodzi przez pętlę for, sprawdzając wartość całkowitą „i” dla pewnej operacji, zwiększa zmienną licznika i zapisuje wartość w tablicy. Po każdym sprawdzeniu mój rodzic powinien przekazać wartość całkowitą „i” mojemu dziecku przez potok. Moje dziecko używa wtedy tej wartości całkowitej, sprawdza wartość i powinno zwiększyć zmienną licznika i zapisać wynik w tablicy [udostępnione?]. Ostatecznie; dziecko powinno zwrócić jego ostateczną liczbę rodzicowi, który następnie wypisuje dwie liczby i tablicę „Udostępnione”.

-> Nie jestem pewien, czy muszę mieć wspólną tablicę lub w ogóle zapisać wyniki. Mogę tylko liczyć - praca domowa była niejednoznaczna i czekam na odpowiedź profesora. Również; czy mogę wykonać wspólną tablicę między procesami? To brzmi jak początek jakiegoś problemu dla mnie.

-> Oto moje pytania: Jeden; jak używać potoków dla liczb całkowitych? Widziałem je tylko dla tablic znaków, a poprzednie odpowiedzi nie wydają się uważać, że jest to możliwe lub legalne ..? Nie jestem pewny. Nie mogłem znaleźć na nim żadnej rozdzielczości.

-> Jak używać jednokierunkowej rury do przekazywania liczb całkowitych dziecku? I czy dziecko coś zwraca? Nie jestem pewien, jak jestem w stanie ... rozróżnić dwie rury. „Wiem” [lub myślę, że wiem], że muszę zamknąć jedną nieużywaną część każdej rury, aby uniknąć „jakiegoś niejasnego problemu”.

Przepraszam za głupie pytania; Jeszcze nie uczono mnie procesów (poza widelcem) ani rur (w ogóle) w tej klasie - więc nie jestem pewien, od czego zacząć!

Oto części mojego kodu - nie jest ładny i nie działa i nie oczekuję tego. To bardziej element zastępczy powłoki. Kiedyś wymyślę, jak używać fajki - Prawdopodobnie sprawię, że kod będzie miał sens.

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;

}

questionAnswers(1)

yourAnswerToTheQuestion