2011-04-25 5 views

답변

3

공유 메모리를 사용하고 싶습니다. to open 파일이 필요하고, 길이를 설정하려면 this을 사용하십시오 (아마도 sizeof (* var)), mmap입니다. 포크 앞에서 해. 완료 후 unmap it, close 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

0

리눅스는 복사 (copy-on-write)라는 메커니즘을 사용하여 런타임에 부모 프로세스에 의해 수정됩니다. 이는 기본적으로 변수가 부모 변수를 수정하지 않고 새 프로세스가 변수 하나를 공유하는 한 의미합니다. 그러나 변수가 수정되기 전에 복사되고 새로운 프로세스는 복사를 사용합니다. 이는 성능상의 이유로 이루어지며 기술은 게으른 최적화라고합니다. 변수를 정적 변수로 설정하면 직접 변수에 액세스 할 수 있습니다.

+0

변수가 부모 프로세스 – why

0

C에서 fork하면 부모 변수의 모든 복사본을 가진 하위 프로세스가 생성됩니다. 단순히 변수를 원한다면 fork에 의해 생성 된 사본을 사용할 수 있습니다. 해당 변수를 공유하려면 IPC 메커니즘을 구현할 수 있습니다. IPC 메커니즘을 사용하기에 좋은 안내서를 볼 수 있습니다. here

관련 문제