Използвам споделена памет за комуникация между два процеса. Използвам char** за прикачване към споделеното адресно пространство. Проблемът е, че когато попълня данните за производителя и след това прикача потребителя към адресното пространство, не се прехвърлят данни. Просто получавам нулеви стойности
Това е откъс от моя продуцент
// create shared memory
shm_handle = shmget(key, BUFF_SIZE * PAGE_SIZE, IPC_CREAT | 0644);
printf("\nhandle is %d\n", shm_handle);
// valid handle?
if (shm_handle == -1) {
printf("shared memory creation failed\n");
exit(0);
}
// attach to shared block, see man pages for detail
buf = (char**) shmat(shm_handle, 0, 0);
if (buf == (char **) -1) {
printf("Shared memory attach failed");
exit(0);
}
int a = 0;
buf = malloc(sizeof(char*) * BUFF_SIZE);
for (a = 0; a < BUFF_SIZE; a++) {
buf[a] = malloc(sizeof(char) * PAGE_SIZE);
}
и потребителя
// create shared memory
shm_handle = shmget(key, BUFF_SIZE * PAGE_SIZE, IPC_CREAT | 0644);
printf("handle is %d", shm_handle);
// valid handle?
if (shm_handle == -1) {
printf("shared memory creation failed\n");
exit(0);
}
char ** buft;
int a = 0;
// attach to shared block
buf = (char**) shmat(shm_handle, 0, 0);
if (buf == (char **) -1) {
printf("Shared memory attach failed");
exit(0);
}
buf = malloc(sizeof(char*) * BUFF_SIZE);
buft = malloc(sizeof(char*) * PAGE_SIZE);
for (a = 0; a < BUFF_SIZE; a++) {
buf[a] = malloc(sizeof(char) * PAGE_SIZE);
buft[a] = malloc(sizeof(char) * PAGE_SIZE);
}
printf("%s", buf[0]);
buf = (char**) shmat(...); buf = malloc(...);
изхвърляте това, което shmat ви даде, и го заменяте със скучно старо несподелено разпределение... - person Mat   schedule 14.03.2014