我有一个项目,我必须从一个父进程中分叉A B C和D进程,这是原始程序/ main()函数。我使用管道在进程之间进行通信,并且我经历了大量编码,但是我无法在进程之间发送正确的消息。但是,我决定回去理解fork()的基本概念,所以我编写了以下代码。
------已编辑:我的问题是我可以使用此模板通过所有4个进程的管道发送消息并从父进程读取这些消息吗?如果是这样,我必须在哪个父节中写下阅读代码? `
if (fork()) { //parent log
printf("Inside parent\n");
if (fork()) { //parent log
printf("Inside parent\n");
if (fork()) { //parent log
printf("Inside parent\n");
if (fork()) { //parent log
printf("Inside parent\n");
}else { //child process D
printf("Inside process D\n");
_exit(1);
}
}else { //child process C
printf("Inside process C\n");
_exit(1);
}
}else { //child process B
printf("Inside process B\n");
_exit(1);
}
}else { //child process A
printf("Inside process A\n");
_exit(1);
}
我的目标是将消息从A发送到B,从B发送到C,从B发送到D,同时将消息从任何进程(A B C和D)发送到父进程。 这个代码模板是否正确?或者它的结构有问题? 非常感谢。
答案 0 :(得分:2)
虽然您的代码确实创建了4个子进程,但它可以简单得多:
int main()
{
int i;
for(i = 0; i < 4; i++) {
printf("getpid = 0x%X\n", getpid());
if(fork()) {
printf("Inside parent\n");
}
else {
printf("Inside process %c\n", 'A'+i);
exit(1);
}
}
}
关键的想法是,您可以通过i
的值来区分每个孩子。您甚至可以在i
声明中使用switch
:
int main()
{
int i;
for(i = 0; i < 4; i++) {
printf("getpid = 0x%X\n", getpid());
if(fork()) {
printf("Inside parent\n");
}
else {
switch(i) {
case 0:
printf("In process A\n");
break;
case 1:
printf("In process B\n");
break;
case 2:
printf("In process C\n");
break;
case 3:
printf("In process D\n");
break;
}
exit(1);
}
}
}