Нет связи между реализациями системного вызова shmget
(реализация, полученная из системы V AT & T) и mmap
(реализация, полученная из системы BSD Беркли) Это правда, что в системах BSD общая память AT & T реализуется с использованием mmap
редактировать частные сегменты без прикрепленного файла, но это также бесполезно, потому что вам нужно связать общий сегмент с файлом.
Как вам нужно, единственная возможность поделиться сегментами памяти, относящимися к файлусодержимое осуществляется с помощью системного вызова mmap
, поскольку сегменты разделяемой памяти System V. не имеют средств для привязки файла к ним.
Все эти ресурсы (SysV или BSD) имеют набор битов разрешений, связанных сте, которые позволяют использовать их с некоторой безопасностью, но, как это происходит с файлами, только глобальным (весь ресурс) способом, что дает вам возможность получить доступ ко всему или вообще ничего.
Кстати, выможет реализовать то, что вы хотите с помощью копирования содержимого сегмента в другойivate, сегмент (только размер, который вы хотите, чтобы клиент мог видеть), только сегменты, к которым ему разрешен доступ, и таким образом вы можете лучше контролировать, кому и что разрешено делать клиентам.
И наконец, помните, что этот подход требует копирования сегментов разделяемой памяти, поэтому вам нужно не забывать копировать экспортированный сегмент для клиента, если вы не хотите, чтобы изменения, сделанные этим клиентом, были потеряны, когда клиент закончит использовать их.
С моей точки зрения, вы немного усложняете вещи, но вы лучше знаете, как разрабатывается ваше приложение, чем я.