Ich verwende Shared Memory für die Kommunikation zwischen zwei verschiedenen Prozessen. Ich erstelle Shared Memory von 16 MB Größe. Ich versuche, zwei verschiedene Teile des gemeinsamen Speichers anzubringen. Eine zum Schreiben und andere zum Lesen. Auch wenn es sich um eine andere Speicheradresse handelt, wird eine andere geändert, wenn eine geändert wird. Ich muss etwas falsch machen. Unten ist das Code-Snippet, an dem ich mehrere freigegebene Speicherorte anschließe.Anhängen an verschiedene Teile des gemeinsamen Speichers funktioniert nicht richtig
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;
}
Ich habe die Struktur richtig ausgerichtet, so dass es keinen Einfluss von Bytes gibt. Was ist falsch mit meinem Code, dass es an den gleichen Teil des gemeinsamen Speichers nicht an verschiedene Teile anfügt. – Kunal
@Kunal es scheint, dass lseek nicht den mmap-Aufruf mit fd als Argument beeinflussen wird. Muss bestätigt werden. – lulyon
Ich habe versucht, sizeof (struct operation_st) als mmap-Offset-Parameter anzugeben, aber es gab MAP_FAILED Fehler. – Kunal