Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Fork程序请审阅_C - Fatal编程技术网

C Fork程序请审阅

C Fork程序请审阅,c,C,编写一个C程序,将名为done的环境变量设置为0 然后,程序将要求用户在循环中输入5个数字,并将这些数字存储在5个int元素的数组中 然后程序将创建一个克隆进程(使用fork() 克隆应运行名为sum()的函数,该函数计算数组中所有数字的总和 之后,克隆将把done环境变量设置为1。它还将创建第二个名为result的环境变量,并将其设置为sum()函数的返回值 父进程等待done变量,直到它设置为1 如果为1,则父级将在屏幕上打印:元素之和为:结果 请注意,result是名为result的环境变

编写一个C程序,将名为done的环境变量设置为0

然后,程序将要求用户在循环中输入5个数字,并将这些数字存储在5个int元素的数组中

  • 然后程序将创建一个克隆进程(使用fork()
  • 克隆应运行名为sum()的函数,该函数计算数组中所有数字的总和
  • 之后,克隆将把done环境变量设置为1。它还将创建第二个名为result的环境变量,并将其设置为sum()函数的返回值
  • 父进程等待done变量,直到它设置为1
  • 如果为1,则父级将在屏幕上打印:元素之和为:结果 请注意,result是名为result的环境变量的内容

    请注意,您需要为sum()函数选择合适的签名,
    这意味着由您决定参数的类型、数量以及返回值的类型

    我不知道为什么我的程序不起作用

    #include<stdlib.h>
    #include<stdio.h>
    #include<string.h>
    #include<unistd.h>
    
     int sum(int a[], int size) {
    
        int index, result = 0;
    
        for (index = 0; index < size; index++) {
    
                result+=a[index];
                return result;
        }
    }
    
        int main() {
    
                int i, array[5], result;
                long pid;
                char string[20];
    
                for (i = 0; i < 5; i++) {
    
                        scanf("%d", &array[i]);
                        if (i == 4) {
                        }
                }
    
                setenv("done", "0", 1);
    
                pid = fork();
    
                if (pid == 0) {
    
                        result = sum(array,5);
                        sprintf(string, "%d", result);
                        setenv("result", string, 1);
                        setenv("done","1",1);
                }
    
                else {
                        while (strcmp(getenv("done"), "0") == 0) {
                                                                            }
    
                        result = atoi(getenv("result"));
                        printf("The sum of elements is %d\n", result);
    
                }
    
                return 0;
        }
    
    #包括
    #包括
    #包括
    #包括
    整数和(整数a[],整数大小){
    int索引,结果=0;
    对于(索引=0;索引
    这不是您想要的答案,但通过环境变量进行双向通信几乎是不可能的,因为正如注释中所指出的,子进程不能影响其父进程环境

    我建议你看看:

    • 共享内存
    • 烟斗
    • 插座
    • RPC

    不幸的是,单独的进程不共享环境,这意味着您的实现将永远无法工作。为此,请使用共享内存(或文件),而不是您而不是我。按照规定,这不能理智地完成(我仍然相信这可以疯狂地完成)。子进程通常不能影响其父进程的环境。