通过子fork内的指针增加变量值

时间:2016-10-28 13:18:31

标签: c pointers fork

以下代码应该执行作为参数传递给主

的外部程序
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/wait.h>


int main(int argc ,char* argv[])
{
    int e =0;
    int* f=&e;
    printf("%p\n",f);
    pid_t p ;
    for(int i=1;i<argc;i++)
    {
        p=fork();
        wait(NULL);
        if(p==0)
        {
            printf("\n---------------------\n");
            execvp(argv[i],&argv[i]);
            printf("erreur \n");
            (*f)=(*f)+1;
            printf("%d\n",*f);
            printf("%p\n",f);
            exit();

        }
    }
    if(p>0)
    {
        printf("erreurs: %d \n",*f  );
    }
    return 0;
}

该计划还旨在显示发生了多少错误。但是,即使指向其地址的指针* f在子fork内递增,变量e = 0仍为0。

如何解决此问题?

1 个答案:

答案 0 :(得分:4)

当您致电fork时,流程会重复。父和子每个都有自己的私有内存映射,它们自己的所有变量集。一个进程不可能更改另一个进程变量的值。

如果您想在两个流程之间共享数据,则应使用其他inter-process communication方法,例如shared memory