Хотя помнится это было с shm_open а не с sem_open на sem_open даже при приманченной tmpfs ругалось :(
Ну заюзай тогда Sys V семафоры, правда там уродский ftok()
shm_open() вроде работает, процессы даже показывают одинаковый указатель на именнованную shared memory. Раньше такого не было - когда я не монтировал tmpfs процессы обменивались данными через именнованную shared memory, но указатели на неё были разными.
Cейчас пытаюсь делать семафоры sem_init() и sem_wait() -- но пока синхронизации процессов добиться не удалось, создаётся ощущение, что процессы работают сами посебе. Что надо перепроверить или где почитать по этой теме? HELP!
Читай R. Stevens, UNIX Network Programming.
Есть перевод на русский язык в двух томах:
UNIX: разработка сетевых приложений (У.Стивенс)
и
UNIX: взаимодействие процессов (У.Стивенс)
Можно заказать их на сайте издательства "Питер" www.piter.com
Обе книги есть. В частности "UNIX взаимодействие процессов"
Цитат из неё: стр 237, ГЛАВА 10 Семафоры Posix
10.1 Введение .... Мы рассматриваем три типа семафоров: *именованные семафоры... *размещаемые в разделяемой памяти семафоры Posix *семафоры System V (глава 11), обслуживаемые ядром.
Все три типа семафоров могут использоваться для синхронизации как отдельных процессов, так и потоков одного процесса.
Вот я чем и занимаюсь: "*размещаемые в разделяемой памяти семафоры Posix" и "синхронизации как отдельных процессов" и ни чего не получается.
100 лет назад в рамках одного процесса потоки синхронизировались нормально. Сейчас засинхронизировать процессы через Posix семафоры размещаемые в именованной разделяемой памяти не получается.
Где искать exampl-ы ? Где искать форумы по ядерным примочкам?
initializes the semaphore object pointed to by sem. The count associated with the semaphore is set initially to value. The pshared argument indicates whether the semaphore is local to the current process ( pshared is zero) or is to be shared between several processes ( pshared is not zero).
LinuxThreads currently does not support process-shared semaphores, thus sem_init always returns with error ENOSYS if pshared is not zero.
Т.е. семафоры POSIX в разделяемой памяти в Linux не поддерживаются. Для синхронизации процессов прийдется использовать SysV семафоры.