Основы программирования в Linux
Шрифт:
Если совместно используемая память создана успешно,
shmat
Когда вы впервые создаете сегмент совместно используемой памяти, он недоступен ни одному процессу. Для того чтобы обеспечить доступ к совместно используемой памяти, нужно присоединить ее к адресному пространству процесса. Делается это с помощью функции
Первый
Второй параметр
Третий параметр
Если вызов
Наличие доступа для чтения совместно используемой памяти и записи в нее зависит от владельца (создателя сегмента совместно используемой памяти), прав доступа и владельца текущего процесса. Права доступа к совместно используемой памяти подобны правам доступа к файлам.
Исключение из этого правила возникает, если выражение
shmdt
Функция
shmctl
Функции управления совместно используемой памятью (к счастью) гораздо проще аналогичных, но более сложных функций для семафоров:
У структуры типа
Первый
Второй параметр
Таблица 14.2
| Значение | Описание |
|---|---|
| IPC_STAT | Задаёт данные в структуре shmid_ds , отображающие значения, связанные с совместно используемой памятью |
| IPC_SET | Устанавливает значения, связанные с совместно используемой памятью в соответствии с данными из структуры типа shmid_ds , если у процесса есть право на это действие |
| IPC_RMID | Удаляет сегмент совместно используемой памяти |
Третий параметр
В случае успеха возвращает 0, в случае ошибки — -1. В стандарте X/Open не описано, что произойдет, если вы попытаетесь удалить присоединенный к процессу сегмент совместно используемой памяти. Обычно присоединенный, но удаленный сегмент совместно используемой памяти продолжает функционировать до тех пор, пока не будет отсоединен от последнего процесса. Но поскольку это поведение не задано в стандарте, на него лучше не рассчитывать.
Выполните упражнение 14.2.
После знакомства с функциями совместно используемой памяти можно написать программу для их использования. В данном упражнении вы напишите пару программ: shm1.c и shm2.c. Первая (потребитель) создаст сегмент разделяемой памяти и затем отобразит любые данные, записанные в него. Вторая (поставщик) присоединит существующий сегмент совместно используемой памяти и позволит вам ввести данные в этот сегмент.
1. Сначала создайте общий заголовочный файл для описания совместно используемой памяти, которую вы хотите предоставить. Назовите его shm_com.h.
В файле определена структура, которая будет применяться в обеих программах: потребителе и поставщике. Вы используете флаг
Бояръ-Аниме. Газлайтер. Том 33
33. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Ваше Сиятельство 14
14. Ваше Сиятельство
Фантастика:
боевая фантастика
аниме
фэнтези
гаремник
рейтинг книги
#НенавистьЛюбовь
Любовные романы:
современные любовные романы
рейтинг книги
Камень. Книга 3
3. Камень
Фантастика:
фэнтези
боевая фантастика
рейтинг книги
Дважды одаренный. Том V
5. Дважды одаренный
Фантастика:
аниме
альтернативная история
городское фэнтези
рейтинг книги
Звездная Кровь. Изгой VII
7. Звездная Кровь. Изгой
Фантастика:
боевая фантастика
технофэнтези
рпг
фантастика: прочее
попаданцы
рейтинг книги
Железный Воин Империи VII
7. Железный Воин Империи
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Паутина
Фантастика:
детективная фантастика
рейтинг книги