Проверка, является ли число простым, используя вилку и трубу - PullRequest
0 голосов
/ 27 апреля 2020

Так что мне нужно сделать следующую программу: создать дочерний процесс, родитель считывает числа с клавиатуры (до 0) и отправляет их ребенку, ребенок получает числа от родителя и печатает те, которые являются простыми, когда ребенок получает 0 от родителя, он прекратит работу.

И я сделал это следующим образом:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
        int a=1;
        int isprime=0;
        int p[2];
        pipe(p);

        int pid = fork();
        if(pid < 0)
                exit(1);
        if(pid == 0)
        {
                close(p[1]);
                read(p[0],&a,sizeof(int));
                isprime = 1;
                for(int i=2;i*i<=a;i++)
                        if(a%i==0)
                                isprime = 0;
                if(isprime == 1)
                        printf("%d is prime",a);
                close(p[0]);
        }
        else
        {
                close(p[0]);
                while(a!=0){
                        printf("a=");
                        scanf("%d",&a);
                        write(p[1],&a,sizeof(int));
                }
                wait(0);
                close(p[1]);

        }

        return 0;
}

Но это не работает должным образом, он останавливается после первого чтения а. Кто-нибудь может мне помочь, пожалуйста?

...