[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Программирование: Разработка и отладка программ


Дескрипторы информационных команд SMIT

Для получения информации, необходимой для продолжения работы с интерфейсом SMIT (например, текущих значений динамических параметров), в Инструменте управления системой (SMIT) предусмотрено несколько специальных дескрипторов. Каждый из этих дескрипторов связан с текстом команды, применяемой для получения необходимых данных.

Для определения команд, получающих информацию, применяются следующие дескрипторы:

При выполнении команды, определенной дескриптором cmd_to_list, cmd_to_classify или cmd_to_discover, SMIT сначала создает дочерний процесс. Стандартный вывод сообщений об ошибках (strerr) и стандартный вывод дочернего процесса перенаправляются в SMIT с помощью конвейера. Затем в дочернем процессе SMIT выполняет функцию setenv("ENV="), чтобы исключить возможность автоматического запуска команд из пользовательского файла $HOME/.env при запуске новой оболочки. Затем SMIT вызывает функцию execl, которая запускает оболочку ksh, используя в качестве значения параметра строку ksh -c. Если при выходе возвращается значение 0, SMIT сообщает пользователю, что команда не выполнена.

SMIT задает полные имена файлов протокола и флаги подробного вывода, трассировки и отладки, применяемые в текущей среде выполнения команды. Указанные значения задаются с помощью следующих переменных среды:

Наличие или отсутствие соответствующего флага обозначается значением 1 или 0.

Для того чтобы просмотреть текущие значения, вызовите функцию оболочки после запуска SMIT, а затем выполните команду env | grep _SMIT.

Операции записи в файлы протокола должны выполняться в режиме добавления и сопровождаться немедленной записью содержимого буферных файлов на диск (если это не происходит автоматически).

Дескриптор cmd_to_discover

При создании окна диалога программа SMIT получает из хранилища объектов заголовок окна диалога (объект sm_cmd_hdr) и тело окна диалога (один или несколько объектов sm_cmd_opt). Однако объекты sm_cmd_opt можно инициализировать и динамическими значениями. Если поле sm_cmd_hdr.cmd_to_discover не пустое (не ""), то для получения текущих значений SMIT запускает команду, указанную в этом поле.

В качестве значения дескриптора cmd_to_discover можно задать любую командную строку ksh. Стандартный вывод команды должен иметь следующий формат:

#имя_1:имя_2: ... :имя_n\n
значение_1:значение_2: ... :значение_n

В стандартном выводе команды первым символом всегда должен быть знак фунта (#). Для отделения строки имен от строки значений необходимо указывать символ новой строки (\n). Если имен и значений несколько, они разделяются двоеточиями (:). Любое имя и значение может быть пустым (чему соответствуют два последовательных двоеточия без пробела между ними). SMIT поддерживает набор внутренних текущих значений в этом формате и использует его для передачи пар "имя-значение" из одного меню в другое.

Примечание: Если значение содержит символ : (двоеточие), то перед : необходимо указать #! (знак фунта и восклицательный знак). В противном случае символ : будет восприниматься программой SMIT как разделитель полей.

Когда SMIT запускает команду, указанную в поле cmd_to_discover, он перехватывает данные из стандартного вывода команды и загружает указанные пары "имя-значение" ( имя_1 и значение_1 имя_2 и значение_2 и т.д.) в дескрипторы disp_values и aix_values объектов sm_cmd_opt (опция команды окна диалога), сравнивая эти имена с дескрипторами sm_cmd_opt.disc_field_name объектов sm_cmd_opt.

В дескрипторе disc_field_name объекта sm_cmd_opt (опция команды окна диалога), представляющего выбранное ранее значение, должно быть указано имя "_rawname" или "_cookedname" (или любое другое имя, переопределяющее имя по умолчанию). В этом случае дескриптор disc_field_name диалогового окна sm_cmd_opt не будет полем ввода. Если команде всегда должно передаваться некоторое значение, то дескриптору required диалогового окна sm_cmd_opt нужно присвоить значение y (да) или одно из аналогичных значений.

В случае инициализации кольцевого списка опций в качестве значения по умолчанию, или начального значения поля ввода, в дескрипторе cmd_to_discover можно задать текущее значение (то есть, любую пару "имя-значение" из текущего набора значений окна). Если при инициализации окна диалога поле ввода окна совпадает с именем из текущего набора имен для этого окна (хранящегося в sm_cmd_opt.disc_field_name), то система проверят, не является ли поле кольцевым списком опций (sm_cmd_opt.op_type = "r"), и нет ли для него предопределенных значений кольцевого списка (sm_cmd_opt.aix_values != ""). Если это действительно поле кольцевого списка, то указанный набор значений кольцевого списка сравнивается с текущим значением disc_field_name. Если для какой-либо опции обнаруживается совпадение, то это значение из кольцевого списка опций становится значением по умолчанию (в sm_cmd_opt.value_index указывается его индекс) и выдается соответствующее преобразованное значение (sm_cmd_opt.disp_values), если оно есть. Если совпадения не обнаружено, то выдается сообщение об ошибке, и в качестве значения по умолчанию принимается текущее значение, которое становится единственным вариантом в кольцевом списке.

Во многих случаях команды получения информации уже существуют. Есть общие принципы работы с командами добавления, изменения, удаления и просмотра устройств и памяти. Например, пусть окну диалога команды mk ("добавить") необходимо получить значения определенных параметров. Для этого окно диалога может вызвать команду просмотра (ls) с параметром, для которого нужны значения по умолчанию. Для получения значений по умолчанию программа SMIT использует стандартный вывод команды просмотра (ls). Для некоторых объектов значения по умолчанию постоянны и известны уже на стадии разработки (т.е. не зависят от текущего состояния компьютера); в этом случае значения по умолчанию могут инициализироваться непосредственно в записи кода для окна диалога, а дескриптор cmd_to_discover не нужен. Затем окно диалога показывается на экране. После заполнения всех полей ввода в окне диалога и их подтверждения выполняется команда mk.

В качестве другого примера рассмотрим окно диалога команды ch. В нем для получения текущих значений параметров, например, конкретного устройства, применяется команда ls. Программа SMIT использует стандартный вывод этой команды (ls) для заполнения полей окна перед его выдачей на экран. В этом примере для получения информации применяется та же команда ls, что и в примере с командой (mk), за исключением некоторых небольших различий в наборе опций.

Дескрипторы cmd_to_*_postfix

Этот дескриптор определяет постфикс команды, заданной дескриптором cmd_to_discover, cmd_to_classify или cmd_to_list. Постфикс - это строка символов, определяющая флаги и параметры, которые добавляются к команде перед ее выполнением.

Для определения постфикса, добавляемого к команде, могут применяться следующие дескрипторы:

В приведенном ниже примере показано, как использовать постфиксные дескрипторы для определения флагов и значений параметров. Символ * (звездочка) в примере заменяет list, classify или discover.

Пусть для cmd_to_* задано значение "DEMO -a", для cmd_to_*_postfix - значение "-l _rawname -n stuff -R _cookedname", и указаны следующие текущие значения:

#имя1:_rawname:_cookedname::stuff\n
значение1:gigatronicundulator:parallel:xxx:47

Тогда будет сформирована команда следующего вида:

DEMO -a -l 'gigatronicundulator' -n '47' -R 'parallel'

Значения постфиксного дескриптора можно заключать в одинарные кавычки (''). В этом случае пробелы, содержащиеся в значениях параметров, будут обрабатываться правильно.

Связанная информация

Глава 25, Инструмент управления системой (SMIT)

Типы окон SMIT , Классы объектов SMIT , Псевдонимы и команды быстрого доступа SMIT и Создание и выполнение команд SMIT

Добавление задач в базу данных SMIT , Отладка расширений базы данных SMIT , Создание справки по новой задаче SMIT

Команда ksh, команда smit


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]