Так что я пытаюсь создать программу, которая принимает вход пользователя (цена, например, 50), а затем первый ребенок передает ее второй, второй добавляет 10 (цена сейчас 60), третья затем 50 (сейчас цена 110), а 4 - только печать/возврат окончательной цены. У меня есть fork в цикле, и я создаю каналы, но цена всегда одна и та же, только 10 добавляется в каждом дочернем элементе. Что не так или как исправить, чтобы он работал, как я хочу.C неназванные трубы и вилка для расчета
Мой код:
int main(int argc,char *argv[])
{
int anon_pipe[2];
int n,N=4;
char value_price[100];
if(argc>1)
{
int price=atoi(argv[1]);
printf("%d\n",price);
if(pipe(anon_pipe)==-1){
perror("Error opening pipe");
return -1;
}
for(n = 0; n < N; n++){
switch(fork()){
case -1:
perror("Problem calling fork");
return -1;
case 0:
close(anon_pipe[1]);
read(anon_pipe[0],value_price,100);
price+=10;
sprintf(value_price,"%d \n",price);
printf("Price: %d\n",atoi(value_price));
write(anon_pipe[1],value_price,sizeof(value_price));
_exit(0);
}
}
close(anon_pipe[0]);
sleep(1);
close(anon_pipe[1]);
}
return 0;
}
Обратите внимание, что у нас есть [документация] (http: // stackoverflow.com/documentation/posix/8082/pipe/26063/connect-two-child-процессы-через-канал # t = 201612081850028838105) для настройки передачи данных от ребенка к ребенку по трубе. –