Как я могу получить доступ и изменить глобальную переменную для нескольких файлов? - PullRequest
0 голосов
/ 27 июня 2019

Как видно из заголовка, я хочу создать систему, в которой две программы могут получать доступ и изменять одну и ту же глобальную переменную.

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

1 Ответ

3 голосов
/ 27 июня 2019

В C глобальные переменные являются глобальными для исполнительного блока (процесса), а не глобальными для среды выполнения (системы).Стандарт C не предоставляет механизм для разделения памяти между процессами.Однако, ваша платформа (Linux, Windows, MacOS и т. Д.), Вероятно, делает.Посмотрите "Общая память".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...