我的任务是
一个父母和两个孩子
b.家长从用户那里获取数据
给孩子们做加减法。
再次从用户输入并发送给另一个孩子进行乘法和除法。
第一个子进程创建另一个子c3。
f.两个子进程都将结果发送给子进程c3以显示输出。
g.父进程在完成每个子进程任务后终止进程。
我已经写了下面的代码,但我不知道我做错了什么,我试着调试它,但我不知道它出了什么问题,它没有显示乘法和除法的结果。
这是我的代码:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include<string.h>
#include <stdlib.h>
int main()
{
int status = 0;
int pfds[2];
int pfds2[2];
int pfds3[2];
int pfds4[2];
int val = 0;
int val2 = 0;
pipe(pfds);
pipe(pfds2);
pipe(pfds3);
pipe(pfds4);
printf("Enter FIRST Number: ");
scanf("%i", &val);
printf("Enter SECOND Number: ");
scanf("%i", &val2);
if (fork() == 0)
{
//Child
printf("I'm Child 1 and I'm Calculating Sum AND Differnece Of Numbers\n");
read(pfds[0], &val, sizeof(val));
read(pfds2[0], &val2, sizeof(val));
int sum = val + val2;
int sub = val - val2;
write(pfds3[1], &sum, sizeof(val));
write(pfds4[1], &sub, sizeof(val));
if (fork() == 0)
{
read(pfds3[0], &val, sizeof(val));
printf("Sum Of Numbers Is : %i\n", val);
read(pfds4[0], &val, sizeof(val));
printf("Sub Of Numbers Is : %i\n", val);
read(pfds[0], &val, sizeof(val));
printf("Mul Of Numbers Is : %i\n", val);
read(pfds2[0], &val, sizeof(val));
printf("Div Of Numbers Is : %i\n", val);
exit(1);
}
else
{
wait(&status);
}
exit(1);
}
else
{
if (fork() == 0)
{
//Child2
printf("I'm Child 2 and I'm Calculating Multiplication and Division Of Number\n");
read(pfds[0], &val, sizeof(val));
read(pfds2[0], &val2, sizeof(val));
int mul = val * val2;
int div = val / val2;
write(pfds[1], &mul, sizeof(val));
write(pfds2[1], &div, sizeof(val));
exit(0);
}
else
{
//wait(&status);
write(pfds[1], &val, sizeof(val));
write(pfds2[1], &val2, sizeof(val));
wait(&status);
} //else1
} //else2
} //main
它给了我以下输出:
Enter FIRST Number: 4
Enter SECOND Number: 2
I'm Child 1 and I'm Calculating Sum AND Differnece Of Numbers
I'm Child 2 and I'm Calculating Multiplication and Division Of Number
Sum Of Numbers Is : 6
Sub Of Numbers Is : 2
如果有人能帮忙谢谢你。
最佳答案
以下是您可以做的:
#include <stdio.h>
#include <unistd.h>
#include<stdlib.h>
int main()
{
int status = 0;
int fd1[2], fd2[2], fd3[2], fd4[2], a, b;
pipe(fd1); pipe(fd2);
pipe(fd3); pipe(fd4);
printf("Input two numbers for + and - ");
scanf("%d,", &a); scanf("%d,", &b);
write(fd1[1], &a, sizeof(int));
write(fd2[1], &b, sizeof(int));
printf("Input two numbers for multiplication and division\n");
scanf("%d,", &a); scanf("%d,", &b);
write(fd3[1], &a, sizeof(int));
write(fd4[1], &b, sizeof(int));
pid_t child1 = fork();
if (child1 == 0)
{
int status = 0, a, b, c;
read(fd1[0], &a, sizeof(int));
read(fd2[0], &b, sizeof(int));
printf("I'm 1st child and calculating + and -\n");
c = a + b;
a = a - b;
write(fd1[1], &c, sizeof(int));
write(fd2[1], &a, sizeof(int));
pid_t c3 = fork();
if (c3 == 0)
{
int sum, sub, mul, div;
read(fd1[0], &sum, sizeof(int));
read(fd2[0], &sub, sizeof(int));
read(fd3[0], &mul, sizeof(int));
read(fd4[0], &div, sizeof(int));
printf("SUM = %d\n", sum);
printf("SUB = %d\n", sub);
printf("MUL = %d\n", mul);
printf("DIV = %d\n", div);
}
}
else
{
pid_t child2 = fork();
if (child2 == 0) {
int status = 0, a, b, c;
read(fd3[0], &a, sizeof(int));
read(fd4[0], &b, sizeof(int));
printf("I'm 2nd child and calculating multiplication and division");
c = a*b;
a = a / b;
write(fd3[1], &c, sizeof(int));
write(fd4[1], &a, sizeof(int));
}
}
return 0;
}
希望这对你有帮助:)
关于c - child 使用管道的计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43121331/