如何更改另一个文件中存在的外部变量的值?

时间:2014-09-28 06:44:55

标签: c static global extern

我在head.h中定义了一个静态整数,如下所示。

// head.h

#include <stdio.h>
#include <stdlib.h>
static int a = 100;

我在两个终端中同时执行one.c和two.c两个程序,首先是一个.c因为我给了getchar()它等待从stdin获取输入。

// one.c

#include "head.h"

extern int a;
int main(void)
{
     getchar();
     printf("Value of a : %d\n", a);
     return 0;
}

当one.c正在等待我执行two.c,它将a的值更改为80,我已声明&#39; a&#39;作为head.c中的静态,因此它只有一个内存来存储没有创建副本的值。按下ENTER,two.c打印a的值为80.但是现在当按下一个c进入时,它仍然打印100。

// two.c

 #include "head.h"

 extern int a;
 int main(void)
 {
     a = 80;
     getchar();
     printf("Value of a : %d\n", a);
     return 0;
 }

为什么这不起作用,如果有其他方法可以更改外部变量,请告诉我。

1 个答案:

答案 0 :(得分:1)

两个不同的进程无法看到彼此的地址空间,因为i386是专门为保护进程地址空间而设计的。

如果你需要两个不同的进程和共享内存,那么你需要线程,它不是一个进程,但它有类似的行为。

哦,当然你仍然可以像这样使用标准输入输出:

在第一个过程中:printf("%d\n", send); 在第二阶段:scanf("%d", &recv);

但要使其正常工作,您必须按如下方式运行程序:

  

./ proc1 | ./proc2

./proc2| ./proc1而非./proc1 && ./proc2而不是在不同的终端。

你也可以使用管道,如果你需要,请在评论中问我,我会描述