Я предполагаю, что этот вопрос адресован специалистам по системному программированию Linux / Unix (к сожалению, я еще не из таких;)).
Я создаю систему, которая работает на многоядерной машине Linux / Unix, в которой процессы взаимодействуют друг с другом через разделяемую память (важна скорость - минимальное количество обращений к ядру, насколько это возможно). «Каналы» общей памяти для связи динамически создаются, когда процесс запрашивает связь с другим - у каждого процесса есть поток прослушивания, который принимает и «принимает» эти запросы, а затем создает / инициализирует каналы общей памяти. Для процессов a и b создаются два канала (области общей памяти) - один канал используется как "вывод" из a и "ввод "на b и другое наоборот.
При создании каналов связи обязательно, чтобы процесс a имел доступ R / W к соответствующему «выходному» каналу и только R-доступ к соответствующему «входному» каналу. Другие процессы не должны иметь возможность получить W-доступ к каналам, совместно используемым другими парами процессов (желательно, чтобы у них не было даже R-доступа).
Какое решение вы можете предложить?
Я думал о:
- определение моих собственных системных вызовов (на данный момент не желательно)
- использование прав доступа к файлам, присущих файловой системе, для наложения этих прав доступа
Для второго решения идея состоит в том, чтобы запускать процессы под разными идентификаторами пользователей и использовать динамическое создание групп для каждой пары процессов и соответственно назначать права доступа к файлам для каждого дескриптора разделяемой памяти (R для группы, R / W для процесса записи, - для отдыхать).
Возможно ли второе решение? Есть ли лучшие решения (например, которые включают некоторые системные вызовы, о которых я не знаю)?
Большое спасибо за ваше время и помощь.