두 가지 다른 프로세스 간의 통신에 공유 메모리를 사용하고 있습니다. 16MB 크기의 공유 메모리를 생성 중입니다. 공유 메모리의 두 부분을 연결하려고합니다. 쓰기 용과 독서 용. 다른 메모리 주소로 매핑되지만 하나가 수정되면 다른 주소도 변경됩니다. 나는 틀린 일을해야만합니다. 아래는 다중 공유 메모리 위치에 연결하는 코드 스 니펫입니다. 공유 메모리에 데이터의 경우공유 메모리의 다른 부분에 제대로 연결되지 않음
void createCommPool()
{
CommSet set1;
int shmid1;
int fd1;
int r;
void * ptr;
void * ptr_res;
umask (0);
fd1 = open(SHARED_MEMORY0, O_CREAT | O_TRUNC | O_RDWR, 0777);
if (fd1 == -1)
error_and_die("open");
r = ftruncate(fd1, region_size);
if (r != 0)
error_and_die("ftruncate");
ptr = mmap(0, sizeof(struct operation_st), PROT_READ | PROT_WRITE,
,MAP_SHARED,fd1,sizeof(struct operation_st));
if (ptr == MAP_FAILED)
error_and_die("mmap");
close(fd1);
set1.shm_addr = ptr;
fd1 = open(SHARED_MEMORY0, O_RDWR, 0777);
if (fd1 == -1)
error_and_die("open");
fprintf(stderr,"The value of the file descriptor:%d\n",fd1);
if (lseek(fd1,sizeof(struct operation_st),SEEK_SET)<0)
{
fprintf(stderr,"could not perform lseek\n");
perror("lseek");
}
ptr_res = mmap(0,sizeof(struct operation_st), PROT_READ| PROT_WRITE,
MAP_SHARED,fd1,0);
if (ptr_res == MAP_FAILED)
error_and_die("mmap2");
close(fd1);
set1.shm_addr_res = ptr_res;
}
바이트의 영향을받지 않도록 구조를 적절하게 정렬했습니다. 내 코드가 공유 메모리의 동일한 부분에 다른 부분이 아닌 어떤 부분에 부착되는지는 잘못되었습니다. – Kunal
@Kunal lseek는 fd를 인수로 사용하여 mmap 호출에 영향을 미치지 않는 것으로 보입니다. 확인할 수 있습니다. – lulyon
mmap 오프셋 매개 변수로 sizeof (struct operation_st)를 지정하려고했지만 MAP_FAILED 오류가 발생했습니다. – Kunal