Руководство программиста для Linux


Базовые понятия - часть 2


Возвращаемый ftok()-ом ключ инициируется от значения inode и нижним числом устройства файла - первого аргумента, и от литеры - второго аргумента. Это не гарантирует уникальности, но приложение может проверить наличие коллизий и, если понадобится, сгенерировать новый ключ. key_t mykey; mykey = ftok ("/tmp/myapp", 'a');

В предложенном выше куске директория /tmp/myapp смешивается с однолитерным идентификатором 'a'. Другой распространенный пример - использовать текущую директорию. key_t mykey; mykey = ftok(".", 'a');

Выбор алгоритма генерации ключа полностью отдается на усмотрение прикладного программиста. Так же как и меры по предотвращению ситуации гонок, дедлоков и т.п., любой метод имеет право на жизнь. Для наших демонстрационных целей мы ограничимся ftok()-ом. Если условиться, что каждый процесс-клиент запускается со своей уникальной "домашней" директории, то генерируемые ключи будут всегда удовлетворительны.

Итак, значение ключа, когда оно получено, используется в последующих системных вызовах IPC для создания или улучшения доступа к объектам IPC.

Команда ipcs выдает статус всех объектов System V IPC.

LINUX-версия ipcs также была авторизована Кришной Баласубраманьяном. ipcs -q: показать только очереди сообщений ipcs -s: показать только семапхоры ipcs -m: показать только разделяемую память ipcs --help: для любознательных

По умолчанию показывают все три категории объектов. Посмотрим на следующий незатейливый вывод ipcs-а: ------ Shared Memory Segments -------- shmid owner perms bytes nattch status ------ Semaphore Arrays -------- ^semid owner perms nsems status ------ Message Queues -------- msqid owner perms used-butes messages 0 root 660 5 1

Здесь мы видим одинокую очередь с идентификатором "0". Она принадлежит пользователю root и имеет восьмеричные права доступа 660, или -rw-rw---. Очередь содержит одно пятибайтное сообщение.

Команда ipcs - это очень мощное средство, позволяющее подсматривать за механизмом ядреной памяти для IPC-объектов. Изучайте его, пользуйтесь им, благоговейте перед ним.

Команда ipcrm

Команда ipcrm удаляет объект IPC из ядра. Однако, поскольку объекты IPC можно удалить через системные вызовы в программе пользователя (как это делать мы увидим чуть позднее), часто нужды удалять их "вручную" нет. Особенно это касается всяких программных оболочек.

Внешний вид ipcrm прост: ipcrm

Требуется сказать, является ли удаляемый объект очередью сообщений (msg), набором семафоров (sem), или сегментом разделяемой памяти (shm). IPC ID может быть получен через команду ipcs. Напомним, что ID уникален в пределах одного из трех типов объектов IPC, поэтому мы обязаны назвать этот тип.




Начало  Назад  Вперед



Книжный магазин