void child(int *fd) {
int j , x;
for(j = 0; j < 10; j ++) {
scanf ("%d", &x);
if(x % 2 != 0)
write(fd[1], sizeof(int), &x);
}
close (fd[1]);
}
void parent(int *fd) {
int v, r = 0;
while(read(fd[0], sizeof(int), &v) != 0)
r = r + v;
printf("%d\n", r);
}
int main(void) {
int s, fd[2];
pipe(fd);
s = fork();
if(s == 0)
child(fd);
else parent(fd);
}
我想的是,上述程序创建管道fd和放置两个文件描述符,每一个入参数FD [0]和FD [1] ==>然后,它创建一个新进程这个C程序是如何工作的?
如果s = 0 ==>程序输入10个整数==>如果整数是奇数==>它会启动子函数==>它将sizeof(int)指向的缓冲区写入& x字节到与打开文件描述符,fd [1] ==>它释放由fd [1]指示的文件描述符
它启动父函数如果s!= 0 ==>如果& V = 0 ==>它显示& v的值。
但我还是不知道如何计划的运作方式,请随时纠正或给予更多细节。感谢您的帮助!
请注意,您应该检查* scanf *的返回值。现在,如果它读取非数字,它将返回0,并保留* y *不变(因此可能在此代码中未初始化),并将非数字保留为未读(所以它将保持返回0而不读取任何内容)。 – hyde
你不能删除那样的内容。人们已经回答了。摧毁你的问题使他们的答案无效。如果你不想在线,你不应该问这个问题。通过在这里发布,你已经永久地将内容授权给网站。请保留原地。 – Stijn
@ user3305709如果您希望看到此内容被删除的原因很充分,请使用“其他”选项标记主持人注意力。然后清楚地解释为什么这需要被删除。虽然也许你只需要解除关联。如果因为这种情况而被暂停,那么像这样删除它最终只会伤害你。 – Bart