c++ - using reference value of pointer when using fork() in linux -
i trying update value of integer pointer throughout application im trying write, while using fork(). having trouble understanding, suppose happening during fork. not share same variables main? how can main update values when changing in forks. here example have created idea of im trying do:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> void changevalue(int *value) { *value = *value * 2; printf("value in changevalue(): %d\n", *value); } main () { int pid; int *value = new int; *value = 10; printf("value in main: %d\n", *value); pid = fork(); if (pid == 0) { changevalue(value); _exit(0); } sleep(2); // want value = 20 here, value stays = 10 printf("value in main after fork(): %d\n", *value); }
if want value updated in parent child, you'll have put in shared memory since form of inter-process communication. i'd recommend using mmap create shared memory. here's example:
#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <sys/mman.h> void changevalue(int *value) { *value = *value * 2; printf("value in changevalue(): %d\n", *value); } int main() { int pid; int *value = (int*)mmap(null, sizeof(int), prot_read|prot_write, map_anon|map_shared, -1, 0); *value = 10; printf("value in main: %d\n", *value); pid = fork(); if (pid == 0) { changevalue(value); _exit(0); } sleep(2); // want value = 20 here, value stays = 10 printf("value in main after fork(): %d\n", *value); } and sample run:
$ ./a.out value in main: 10 value in changevalue(): 20 value in main after fork(): 20
Comments
Post a Comment