Как получить доступ к переменной родительского процесса в C? - PullRequest
1 голос
/ 25 апреля 2011

В одном процессе есть одна переменная с именем "users", и процесс разветвляет некоторые дочерние процессы, я хочу знать, как эти дочерние процессы могут обращаться к переменной "users"?

КСТАТИ:
Переменная будет изменена родительским процессом во время выполнения

Ответы [ 3 ]

3 голосов
/ 25 апреля 2011

Вы хотите использовать общую память. Вам понадобится , чтобы открыть файл, используйте this , чтобы установить длину (вероятно, sizeof (* var)), mmap it. Сделайте это до развилки. После того, как вы закончите снимите отображение , закройте файл и отмените общий файл.

void *mem;
int shm_fd;
shm_fd = shm_open("file", O_CREAT | O_RDWR, 0644);
ftruncate(shm_fd, sizeof(int));
mem = mmap(0, sizeof(int), PROT_WRITE | PROT_READ, MAP_SHARED, shm_fd, 0);
/* fork it, use it */
munmap(mem, sizeof(int));
close(shm_fd);
shm_unlink("file");
0 голосов
/ 25 апреля 2011

Форкирование в C создаст дочерний процесс, который имеет все копии родительских переменных. Если вы просто хотите эту переменную. Тогда вы можете использовать копию той или иной копии, которая была создана fork. Если вы хотите поделиться этой переменной, вы можете перейти к реализации механизмов IPC. Вы можете найти руководство по использованию механизмов IPC здесь

0 голосов
/ 25 апреля 2011

Linux использует механизм, называемый копирование при записи. Это в основном означает, что пока переменная не изменена, родительский и новый процесс совместно используют одну переменную. Но перед изменением переменной она копируется, и новый процесс использует копию. Это сделано из соображений производительности, а метод называется ленивой оптимизацией. Вы можете установить переменную как статическую, а затем получить к ней доступ напрямую.

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