【发布时间】:2019-06-26 21:03:48
【问题描述】:
正如标题所说,我想创建一个系统,让两个程序可以访问和修改同一个全局变量。
我创建了一个目录,其中包含文件 1.c、2.c、foo.c 和 foo.h。
1.c:
#include <unistd.h>
#include <stdio.h>
#include "foo.h"
int main(){
printf("foo is %d\n", foo);
sleep(7);
printf("now foo is %d\n", foo);
}
2.c:
#include <stdio.h>
#include "foo.h"
int main(){
increment();
printf("2.c is incrementing foo. foo is now %d\n", foo);
}
foo.h:
#ifndef FOO_H
#define FOO_H
extern int foo;
void increment(void);
#endif
foo.c:
#include <stdlib.h>
#include "foo.h"
int foo = 5;
void increment(){
++foo;
}
我使用以下编译命令进行编译:
gcc -c foo.c
gcc 1.c foo.o -o 1.out
gcc 2.c foo.o -o 2.out
然后我用./1.out./2.out 运行它,确保2.out 在sleep() 在1.out 中完成之前运行。结果如下:
./1.out
foo is 5
now foo is 5
./2.out
2.c is incrementing foo. foo is now 6
我的理论是,当 1.c 和 2.c 与 foo.o 链接时,它们都会获得自己的 foo 本地副本,因此当一个程序修改 foo 时,另一个程序的版本不会被修改。是否可以创建一个可以跨多个文件共享和修改的全局变量?
【问题讨论】:
-
不,这是不可能的。全局变量是进程的一部分,每个进程都有自己的内存。
-
那么,您有什么建议来完成这项工作吗?
-
如果你想在程序完成后永久保存一些东西,把它放在一个文件中。
-
如果程序同时运行,请使用共享内存或其他形式的进程间通信。
标签: c linker global-variables