gpt4 book ai didi

c - 4 个子进程之间的管道通信仅在第一次有效

转载 作者:太空宇宙 更新时间:2023-11-04 12:38:13 26 4
gpt4 key购买 nike

我编写了这个程序,它接受 N 个参数,并将它们从第一个子进程发送到最后一个。第二个 child 将他收到的值(value)增加 20%,第三个 child 增加 30%。

问题是第一个 child 总是只发送第一个参数。我似乎找不到错误。有人可以帮我解决这个问题吗?这是输出示例:

./prodajnaVerigaAnon 200 100 50
312 312 312

应该是:312 156 78。
这是代码:

for(int i=1;i<argc;i++) {
char init_price[size];
const int len = sprintf(init_price,"%d",atoi(argv[i]));
write(fd1[1], init_price, (size_t) len + 1);
}
close(fd1[1]);
_exit(0);

编辑:我删除了大部分代码,因为这是一项学校作业。

最佳答案

问题是,

write(fd1[1], init_price, (size_t) len + 1);

write 函数通过管道 fd1[1] 发送 200 但没有可用的读取器,这就是为什么管道没有机会刷新,管道中仍然存在 200。所以你的管道无法获得更多的输入。

  read(fd1[0], readbuffer, sizeof(readbuffer)); 

可用,它在管道中只找到 200,因此只读取该值。

如果你想看到变化然后 sleep ,你会观察到读者也能够阅读其他数据。因为 sleep 有助于上下文切换。所以读取器进程将可用于监听管道。

for(i=1;i<argc;i++) 
{
char init_price[size];
const int len = sprintf(init_price,"%d",atoi(argv[i]));
write(fd1[1], init_price, (size_t) len + 1);
sleep(2);
}
close(fd1[1]);
_exit(0);

关于c - 4 个子进程之间的管道通信仅在第一次有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40999317/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com