7
Linux에서 내 프로세스의 일부 메모리 컨텐츠를 다른 프로세스와 공유하려고합니다. 이 작업을 수행하는 방법 중 하나는 shm_open 및 mmap을 사용하는 것입니다. 아래처럼.기존 메모리를 shm_open과 어떻게 공유합니까?
/* Create a new memory object */
fd = shm_open("/bolts", O_RDWR | O_CREAT, 0777);
if(fd == -1) {
fprintf(stderr, "Open failed:%s\n",
strerror(errno));
return EXIT_FAILURE;
}
/* Set the memory object's size */
if(ftruncate(fd, sizeof(*addr)) == -1) {
fprintf(stderr, "ftruncate: %s\n",
strerror(errno));
return EXIT_FAILURE;
}
/* Map the memory object */
addr = mmap(0, sizeof(*addr),
PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
if(addr == MAP_FAILED) {
fprintf(stderr, "mmap failed: %s\n",
strerror(errno));
return EXIT_FAILURE;
}
그러나 이렇게하면 "이미 할당 된 메모리"를 공유 할 수 없습니다. 내 질문 : 이전 할당 된 메모리 내용을 다시 할당하지 않고 공유 할 수 있습니까?
미리 감사드립니다.
그것은 당신이 "이미 할당 된 메모리"와 "이전에 할당 된 메모리"무슨 뜻인지 알아내는 것은 매우 어렵다. 그 메모리를 공유하고 싶다면 다른 프로세스가/bolts 경로를 열고 mmap()을 실행하면 두 프로세스가 동일한 메모리 조각을 공유하게됩니다. – nos
읽기 [shm_overview (7)] (http://man7.org/linux/manage/man7/shm_overview.7.html) –
1 단계. RWX 권한이있는 0x1000에 mmaped 메모리 영역이 있다고 가정하고 MAP_PRITAVE | MAP_ANONYMOUS 깃발. 2 단계. 메모리 주소 0x1000에 일부 데이터를 씁니다. 3 단계. 0x1000 (가상 주소는 0x1000이어야 함)의 메모리 내용을 다른 프로세스와 공유하려고합니다. 3 단계에서 멈췄다. – daehee