以下代码应该执行作为参数传递给主
的外部程序#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。
如何解决此问题?
答案 0 :(得分:4)
当您致电fork
时,流程会重复。父和子每个都有自己的私有内存映射,它们自己的所有变量集。一个进程不可能更改另一个进程变量的值。
如果您想在两个流程之间共享数据,则应使用其他inter-process communication方法,例如shared memory。