Как видно из заголовка, я хочу создать систему, в которой две программы могут получать доступ и изменять одну и ту же глобальную переменную.
Я создал каталог с файлами 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. Результат следующий:
./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, версия другой программы остается неизменной. Можно ли создать одну глобальную переменную, которую можно совместно использовать и изменять в нескольких файлах?