Linux: Полное руководство
Шрифт:
Первый член этого объединения val используется для установки значения одного семафора при использовании команды SETVAL.
Член buf используется командами IPC_STAT и IPC_SET. Это копия внутренней структуры данных семафора.
Указатель на массив array используется командами GETALL и SETALL для получения или установки значений всех семафоров во множестве.
Последние два члена объединения специфичны только для Linux — в других UNIX-системах вы их не найдете.
В случае успеха системный вызов semctl возвращает натуральное число, а в случае ошибки -1. Переменная errno равна:
♦ EACCESS — не хватает полномочий;
♦ EFAULT — адрес arg ошибочен;
♦ EIDRM — множество помечено для удаления:
♦ EINVAL — неправильный аргумент semid;
♦ EPERM — у вас нет прав для выполнения команды cmd;
♦ ERANGE — значение семафора вышло за пределы допустимых значений.
Пример получения значения семафора с номером N из множества sid:
Предположим, что нам нужно вывести состояние всех трех имеющихся принтеров:
А вот код инициализации всех семафоров множества semid:
Довольно часто возникают определенные сложности с установкой прав доступа к множеству семафоров. Рассмотрим следующий код, позволяющий установить права доступа к множеству semid. Права доступа задаются в виде строки, например, «0660».
26.7. Разделяемые сегменты памяти
Сегменты памяти разделяются между несколькими процессами.
Для каждого разделяемого сегмента памяти ядро поддерживает специальную структуру — shmid_ds, описанную в файле
Я немного сократил эту структуру, оставив описание только нужных нам полей. Полагаю, что вы в нем разберетесь. Возможно, вас заинтересовали термины «привязка» и «отвязка». Привязка — это размещение сегмента в адресном пространстве процесса, подключение к разделяемому сегменту памяти (РСП). Отвязка, соответственно, — отключение, Поле shm_nattch содержит количество привязок к РСП на данный момент.
Для создания нового РСП используется системный вызов shmget. Этот же вызов используется для подключения к уже существующему РСП.
Первый аргумент — это ключ IPC, полученный с помощью ftok, второй — размер РСП в байтах, а третий — флаги системного вызова shmget. Если установлен флаг IPC_CREAT, системный вызов создаст новый РСП или подключится к уже существующему сегменту, если обнаружится, что уже есть такой сегмент (с таким же значением ключа). Если установлен флаг IPC_EXCL вместе с IPC_CREAT (сам по себе он бесполезен) подключение к существующему РСП запрещается.
Системный вызов shmget возвращает идентификатор РСП или -1, если произошла ошибка. Переменная errno устанавливается так:
♦ EACCESS — не хватает полномочий для доступа к сегменту;
♦ EINVAL — неправильно заданы размеры сегмента;
♦ EEXISTS — сегмент уже существует, создание невозможно. Вы получите эту ошибку, если будете использовать флаг IPC_EXCL вместе с IPC_CREAT при условии, что сегмент уже существует;
♦ IDRM — сегмент помечен на удаление или уже удален;
Том 9. По экватору. Таинственный незнакомец
Проза:
классическая проза
рейтинг книги
Темная сторона луны
Гидеон Фелл
Детективы:
классические детективы
рейтинг книги
Первый Предтеча. Трилогия
Первый Предтеча
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Рабы Парижа
Детективы:
прочие детективы
рейтинг книги
Жена. Как быть любимой и единственной. Любовница. Как оставаться желанной и счастливой
Научно-образовательная:
семейная психология
рейтинг книги
Макроскоп
Фантастика:
научная фантастика
рейтинг книги
Полукровка. Крест обретенный
Детективы:
криминальные детективы
рейтинг книги
Убить Зверстра
Детективы:
маньяки
рейтинг книги
Олимпия Клевская
Приключения:
исторические приключения
рейтинг книги
Историки Рима
Научно-образовательная:
история
рейтинг книги
Ключевые переговоры. Что и как говорить, когда ставки высоки
Научно-образовательная:
прочая научная литература
рейтинг книги
Дважды одаренный
1. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
рейтинг книги
Солнце мертвых
Фантастика:
ужасы и мистика
рейтинг книги
Река голубого пламени
2. Иноземье
Фантастика:
научная фантастика
рейтинг книги