LINUX.ORG.RU

«общие» переменные в shared object

 , ,


0

2

Узнал что в Windows-овских DLL-ках можно объявлять переменные которые можно использовать во всех процессах использующих библиотеку. Это делается вот так (работает только в компиляторе от Microsoft):

#pragma data_seg(".shared")
#pragma comment(linker,"/SECTION:.shared,RWS")
#pragma data_seg()
__declspec(allocate(".shared")) int shared_var; /* тут объявляются переменные */
Вопрос: есть ли что-нибудь подобное в Linux-овских SO-шках и как такое сделать?

Ответ на: комментарий от wota

Ну это понятно. Согласитесь, но в некоторых случаях «общие» переменные в разных процессах через разделяемую библиотеку будут удобнее, чем использование общей памяти. Поэтому про них и спрашиваю.

LinuxUser ★★ ()
Ответ на: комментарий от LinuxUser

в некоторых случаях «общие» переменные в разных процессах через разделяемую библиотеку будут удобнее

заведи структуру с нужными полями-переменными, кастуй область памяти к указателю на эту структуру и пользуйся

wota ★★ ()
Ответ на: комментарий от LinuxUser

SHM - молодежно и спортивно! Нужно удобство - напиши красивый параметризированный wrapper на С++.

Pavval ★★★★★ ()
Ответ на: комментарий от LinuxUser

Да, такие переменные...

... будут удобнее для пополнения историй успеха где-нибудь на секуния.сом. В своем примере из m$ Вы мужественно расшарили целую секцию DLL. Однако, кто Вам сказал что все процессы которые могут обратиться к ней, будут столь же добронравны как и Ваш? И кто сказал что от непривелигированной учетной записи я не смогу обратиться через эту секцию к адресному пространству привелигированного процесса? При таком подходе Вы «размываете» адресное пространство. Как следствие просто утрачиваете контроль над системой.

Не нужно изобретать средства IPC без уделения должного внимания средствам безопасности.

anonymous ()
Ответ на: комментарий от wota

заведи структуру с нужными полями-переменными, кастуй область памяти к указателю на эту структуру и пользуйся

Хорошо. Тогда два таких вопроса.

Если у меня среди переменных есть строки, и я их размещаю в той же разделяемой памяти, то должна гарантия чтоб mmap разместил замапил память по одному и тому же адресу в разных процессах.

1). Если mmap-у передавать один и тот же адрес в разных процессах, то есть гарантия что он замапит память по одному и тому же адресу в разных процессах?

2). Какой именно адрес передавать?

Адресу также эти вопросы Pavval-у.

LinuxUser ★★ ()
Ответ на: комментарий от LinuxUser

1). Если mmap-у передавать один и тот же адрес в разных процессах, то есть гарантия что он замапит память по одному и тому же адресу в разных процессах?

Адрес в разных процессах будет разный.

2). Какой именно адрес передавать?

Тебе нужно передавать от процесса процессу ссылку на строку в общей памяти? Тогда передавай вместо указателя смещение относительно начала общей памяти.

Pavval ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.