Я пытаюсь создать систему, которая состоит из сервера и нескольких клиентов, которые пытаются общаться друг с другом. Клиенты помещают данные в общую память (созданную с помощью ftok / shmget), а затем могут записывать данные в эту память. Они состоят из 2 отдельных программ.
Сервер считывает значения, которые клиенты записывают в общую память, и записывает их в файл. Я могу заставить клиентов записывать данные в общую память и сервер для чтения данных, но у меня возникают проблемы с блокировкой общей памяти, поэтому несколько клиентов не пишут одновременно.
Я попытался создать семафор (используя sem_open), но это не распределяется между процессами. Как я могу разделить семафор между процессами (или мьютексами, так как они, вероятно, будут работать лучше)?
Вы хотите использовать именованный семафор или мьютекс:
int permissions = 0644;
sem_t *shared_sem;
unsigned int inital_value = 1;
shared_sem = sem_open("SharedSem", O_CREAT, permissions, inital_value);
Также убедитесь, что вы правильно установили разрешения.
использовать «именованный» семафор … например «/ someuniquename», которое используется обоими процессами.