【问题标题】:how to change the value of a extern variable that is present in another file?如何更改另一个文件中存在的外部变量的值?
【发布时间】:2014-09-28 06:44:55
【问题描述】:

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

//head.h

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

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

//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,我在 head.c 中将 'a' 声明为静态,因此它只有一个内存来存储该值,没有副本创建的。按 ENTER,two.c 打印 a 的值为 80。但现在在 one.c 中按 Enter 时,它仍然打印 100。

//两个.c

 #include "head.h"

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

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

【问题讨论】:

  • 两个单独的 C 程序不共享 any 变量,除非您对操作系统进行一些特定调用以在两个程序之间共享内存。

标签: c static global extern


【解决方案1】:

两个不同的进程看不到对方的地址空间,因为i386是专门为保护进程地址空间而制作的。

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

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

在第一个过程中:printf("%d\n", send); 在 2-st 过程中:scanf("%d", &amp;recv);

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

./proc1 | ./proc2

不是./proc2| ./proc1而不是./proc1 &amp;&amp; ./proc2,也不是在不同的终端。

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

【讨论】:

  • 只是一个小建议,并不是说i386是专门为保护进程地址空间而设计的。这是您正在运行的任何操作系统的一个功能。进程隔离也可以在 ARM、MIPS 和其他架构上完成。
猜你喜欢
  • 1970-01-01
  • 2021-11-16
  • 2019-07-30
  • 2021-12-26
  • 2021-05-09
  • 1970-01-01
  • 2015-01-01
  • 2020-02-18
  • 1970-01-01
相关资源
最近更新 更多