从子到父错误值C的管道整数

时间:2017-09-02 19:15:02

标签: pipe fork

我正在尝试将一个值从子节点发送到父节点但是没有获得所需的输出。谁能弄明白我做错了什么?

   int main() {
    printf("I am the parent with process ID:%d\r\n", (int) getpid());
    int rc = fork();
    int sum = 0;
    int array[6] = {2, 3, 7, -1, 10, 6};
    int pipeNum[2];

    pipe(pipeNum);

    if (rc < 0) {
        fprintf(stderr, "fork failed\r\n");
        exit(1);
    } else if (rc == 0) {
        for (int i = 0; i < 6; i++) {
            sum += array[i];
        }
        close(pipeNum[0]);
        printf("I am the child with process ID:%d and I am sending %d to my parent.\r\n", (int) getpid(), sum);
        write(pipeNum[1], &sum, sizeof(sum));
        close(pipeNum[1]);      
    } else {
        wait(NULL);
        close(pipeNum[1]);
        read(pipeNum[0], &sum, sizeof(sum));
        printf("I am the parent with process ID:%d with a final sum of %d\r\n", (int) getpid(), sum);
        close(pipeNum[0]);
        exit(0);
    }
    return 0;
}

这是我得到的输出 我是流程ID的父母:XXX
我是进程ID:XXX的孩子,我向我的父母发送27。
我是进程ID:XXX的父级,最终总和为0

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:1)

您将总和传递给read()和指向sum的指针();你应该传递两个指针

read(pipeNum[0], &newSum, sizeof(newSum));

write(pipeNum[1], &sum, sizeof(sum));

答案 1 :(得分:0)

问题是我正在创建一个流程副本并创建一个管道,导致它们无法通信,因为现在有2个管道。

int rc = fork();
int pipeNum[2];
pipe(pipeNum);

需要发生的事情列在下面

int pipeNum[2];
pipe(pipeNum);
int rc = fork();

首先创建管道后问题得到解决