【发布时间】:2017-04-20 15:55:52
【问题描述】:
我正在练习父进程和 1 个子进程之间的进程通信。我想要做的是孩子发送给父母的每条消息都会阅读它(某种阻塞发送,父母必须先阅读消息,然后孩子继续发送另一条消息)。我不能使用管道。我读过关于阻止发送的 Silberschatz 书,但我还没有找到一个很好的例子(也许邮箱也是)。你能帮忙的话,我会很高兴! 这是一段代码:
int main(int argc, char** argv) {
printf("This process: ");
printf("%d\n",getpid());
printf("Parent: ");
printf("%d\n",getppid());
pid_t f;
int input;
f = fork();
if (f == 0) {
for(int i=0;i<5;i++){
printf("Input a number: ");
scanf("%d",&input);
send(getppid(),input);
}
printf("\n");
exit(0);
} else {
recv(f,input);
printf("%d",input);
}
wait();
exit(0);
}
【问题讨论】:
-
这是做什么的?它有什么作用?它没有做什么(你期望它做的)?
-
我在孩子上输入一个数字->父母阅读它->在孩子上再次输入->父母阅读等等。我只是做了一个只有 5 个数字的简单案例
-
send不能解决您的问题,您绝对不能像套接字文件描述符一样在 pid 上调用它。 -
我从未见过
send()和recv()的两个参数版本。 -
我的解决方案是在管道上吗? (我从上面提到的书中得到了 2 个 arg 发送和接收:P)