У меня проблема с этим упражнением:
Напишите программу на C, которая создает ребенка, а между отцом и ребенком будет двухсторонняя связь с использованием каналов. Его отец прочитал файл (имя которого будет указано пользователем) и пошлет письма ребенку.
Ребенок посчитает количество слов, начинающихся с с с 'a'; если число равно X слов X, начинающемуся с 'a', больше 5, то ребенок создаст своего собственного ребенка (внука). Внук истеблишмента отправит дедом * значение X число любым доступным вам способом и выйдет. [ Путем логического вывода: если число X меньше 6, тогда ребенок просто выходит, и «выход будет прародителем». ]
- Примечание: дед = начальный процесс отца, этого отца внука отца
Вот что я сделал до сих пор; пожалуйста, помогите мне ...
#include <stdio.h>
#include<string.h>
#include <stdlib.h>
#include <fcntl.h>
int main(int argc, char *argv[])
{
int fd1[2], fd2[2], pid, status,sum=0, i;
char gram[100], x;
char buff[100];
char rev[1000];
FILE *fp;
if (pipe(fd1) == -1) { /* Create a pipe */
perror("pipe");
exit(1);
}
pid = fork();
switch (pid)
{
case -1:
perror ("Fork error\n");
exit(99); // in case of error
case 0:
close(fd1[1]);//Close the writing side
rev[1000]= read(fd1[0], buff, 1000); /* Read from the pipe */
/*for (i=0; i< 1000 ; i++)
{
rev[i] = read(fd1[0], buff, sizeof(buff));
}*/
while( rev[i] != '\0')
{
if (buff[i] == 'a' )
{ sum++;
i++;
}
if (rev[i] == "")
{
if (rev[i+1]) //elenxei to epomeno tou kenou
{
sum++;
i++;
}
}
i++;
}
printf("%d", sum);
exit(0);
default:
printf("dwse arxeio\n");
scanf("%s", gram);
close(fd1[0]);//Close the reading side
fp = fopen (gram,"r");
getc(fp);
fclose(fp);
write(fd1[1], buff, sizeof(buff)+1);
close(fd1[1]);//Close the writing side
wait(&status); // waits till the child process ends
}
}