2011-04-25 9 views
1

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

顺便说一句:
变量将通过父进程运行时修改

+0

你想分享进程间的变量还是只有副本是好的? – 2011-04-25 07:06:42

回答

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

修改它似乎是一个很好的计划,谢谢! – why 2011-04-25 08:38:04

0

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

+0

该变量将通过父进程 – why 2011-04-25 07:39:10

0

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