Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Интерфейсы различных подсистем > Устойчивая служба публикации/подписки (PPS) > Общие сведения > Публикация



Публикация

Публикация данных в PPS

Чтобы опубликовать объект PPS, издатель вызывает функцию open() для файла объекта с флагом O_WRONLY (только публикация) или O_RDWR (публикация и подписка). После этого издатель может изменять атрибуты объекта с помощью функции write(), которая не блокирует его.

Содержание статьи:

Создание, изменение и удаление объектов и атрибутов
Несколько издателей

Создание, изменение и удаление объектов и атрибутов

Чтобы создать новый объект:
Создайте файл, имя которого соответствует имени объекта. Будет создан новый объект без атрибутов. Можно добавлять в него атрибуты по мере необходимости.
Чтобы удалить объект:
Удалите файл объекта.
Чтобы создать новый атрибут:
Запишите атрибут в файл объекта.
Чтобы изменить атрибут:
Запишите новое значение атрибута в файл объекта.
Чтобы удалить все существующие атрибуты:
Откройте объект с флагом O_TRUNC.
Чтобы удалить один атрибут:
Укажите знак "-" перед его именем и вызовите функцию write(). Пример:

sprintf( ppsobj, "-url\n" ); /* Delete the "url" attribute */
write( ppsobj-fd, ppsobj, strlen( ppsobj ) );


Caution: Обратите внимание на следующие нюансы при удалении атрибутов:
  • При вызове функции ftruncate() для объекта удаляются все его атрибуты независимо от значения аргумента length.
  • Обычная команда перенаправления командного интерпретатора Bourne Shell:

    echo attr::hello > /fs/pps/object .

    открывает объект с флагом O_TRUNC и удаляет все его атрибуты.


Несколько издателей

Служба PPS предоставляет нескольким издателям возможность публиковать данные в одном и том же объекте. Эта функция необходима, поскольку несколько издателей могут использовать различные атрибуты одного объекта.

Например, в некоторой мультимедийной системе абстрактный процесс io-media может являться источником атрибута "time::значение", а человеко-машинный интерфейс — источником атрибута "duration::значение". Издатель, который изменяет только атрибут time, не затрагивает другие атрибуты при записи. Пример:

write()
PlayCurrent::1.24




Предыдущий раздел: Устойчивая служба публикации/подписки (PPS)