하나의 프로세스에 "users"라는 var가 하나 있고 프로세스가 일부 자식 프로세스를 포크하면이 자식 프로세스가 "users"변수에 어떻게 액세스 할 수 있는지 알고 싶습니다.C에서 부모 프로세스의 변수에 액세스하는 방법은 무엇입니까?
은 BTW :
변수는
하나의 프로세스에 "users"라는 var가 하나 있고 프로세스가 일부 자식 프로세스를 포크하면이 자식 프로세스가 "users"변수에 어떻게 액세스 할 수 있는지 알고 싶습니다.C에서 부모 프로세스의 변수에 액세스하는 방법은 무엇입니까?
은 BTW :
변수는
공유 메모리를 사용하고 싶습니다. to open 파일이 필요하고, 길이를 설정하려면 this을 사용하십시오 (아마도 sizeof (* var)), mmap입니다. 포크 앞에서 해. 완료 후 unmap it, close the file 및 unlink 공유 파일.
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");
에 의해 수정 될 것입니다. – why
리눅스는 복사 (copy-on-write)라는 메커니즘을 사용하여 런타임에 부모 프로세스에 의해 수정됩니다. 이는 기본적으로 변수가 부모 변수를 수정하지 않고 새 프로세스가 변수 하나를 공유하는 한 의미합니다. 그러나 변수가 수정되기 전에 복사되고 새로운 프로세스는 복사를 사용합니다. 이는 성능상의 이유로 이루어지며 기술은 게으른 최적화라고합니다. 변수를 정적 변수로 설정하면 직접 변수에 액세스 할 수 있습니다.
변수가 부모 프로세스 – why
C에서 fork하면 부모 변수의 모든 복사본을 가진 하위 프로세스가 생성됩니다. 단순히 변수를 원한다면 fork에 의해 생성 된 사본을 사용할 수 있습니다. 해당 변수를 공유하려면 IPC 메커니즘을 구현할 수 있습니다. IPC 메커니즘을 사용하기에 좋은 안내서를 볼 수 있습니다. here
프로세스간에 변수를 공유 하시겠습니까? –