如何在C中访问父进程的变量?

时间:2011-04-25 07:04:41

标签: c linux process

在一个进程中有一个名为“users”的var,并且进程分叉了一些子进程,我想知道这些子进程如何访问“users”变量?

顺便说一句:
该变量将在运行时由父进程修改

3 个答案:

答案 0 :(得分:3)

您想使用共享内存。您需要to open个文件,使用this来设置长度(可能是sizeof(* var)),mmap。在叉前做这个。完成unmap itclose the fileunlink共享文件后。

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");

答案 1 :(得分:0)

Linux使用称为copy-on-write的机制。这基本上意味着,只要变量未被修改,父进程和新进程共享一个变量。但在修改变量之前,它会被复制,新进程会使用副本。这是出于性能原因而完成的,技术称为延迟优化。您可以将变量设置为静态,然后直接访问它。

答案 2 :(得分:0)

在C中分叉将创建一个子进程,其中包含父变量的所有副本。 如果你只是想要那个变量,那么你可以使用fork创建的那个副本。 如果你想共享那个变量,你可以去实现IPC机制。 你可以看到一个适合使用IPC机制的指南here