Я работаю над кодом, включая взаимодействие между процессами, используя семафоры. Я сделал структуру так:
typedef struct container {
sem_t resource, mutex;
int counter;
} container;
и использовать таким образом (в основном приложении и то же самое в подчиненных процессах)
container *memory;
shm_unlink("MYSHM"); //just in case
fd = shm_open("MYSHM", O_RDWR|O_CREAT|O_EXCL, 0);
if(fd == -1) {
printf("Error");
exit(EXIT_FAILURE);
}
memory = mmap(NULL, sizeof(container), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
ftruncate(fd, sizeof(container));
Все нормально, когда я использую одну из функций sem_, но когда я пытаюсь сделать что-то вроде
memory->counter = 5;
Это не работает. Возможно, у меня что-то не так с указателями, но я попробовал почти все, и ничего не работает. Может быть, есть лучший способ для разделения переменных, структур и т. Д. Между процессами?
К сожалению, мне не разрешено использовать boost или что-то похожее, код предназначен для образовательных целей, и я намерен сделать его максимально простым.