就像标题所述,我想创建一个系统,其中两个程序可以访问和修改相同的全局变量。
我创建了一个目录,其中包含文件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在1.out中的sleep()完成之前运行。结果如下:
./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时,另一个程序的版本不变。是否可以创建一个可以在多个文件之间共享和修改的全局变量?
答案 0 :(得分:3)
在C中,全局变量对于执行单元(过程)是全局的,而不对于执行环境(系统)是全局的。标准C没有提供在进程之间共享内存的机制。但是,您的平台(Linux,Windows,MacOS等)可能会这样做。查找“共享内存”。