Сервер данных, обеспечивающий поддержание совместного используемого состояния между процессами
ds &
Нет.
ЗОСРВ «Нейтрино»
aarch64, arm, armv7, e2k, mips, ppc, x86
Сервер данных представляет собой процесс, обеспечивающий поддержание совместного использования состояния между другими процессами подобно глобальной среде. Возможность хранения или извлечения данных для процессов обеспечивается с помощью набора вызовов из библиотек сервера данных. Сервер данных можно использовать для реализации различных задач. В частности доступ к нему можно осуществлять с web-сервера Slinger с поддержкой динамического HTML. Для HTTP-сервера slinger используются сервер данных и библиотека сервера данных.
Для хранения данных используются имена переменных, обозначающие буферы данных. Все переменные являются глобальными и доступ к ним может осуществляться из любого процесса (доступ не ограничивается), поэтому в сервере данных может храниться только один экземпляр переменной (имя).
Библиотека сервера данных
Библиотека сервера данных состоит из следующих функций, описанных в разделе Библиотека ds:
Ниже приведен простой (и нефункциональный) пример мониторинга температуры печи с удаленного клиента:
В качестве интерфейса для работы с сервером данных в данном примере используется HTML, но набор поддерживаемых интерфейсов не ограничивается только интерфейсом HTML. |
Ниже приведен пример отображения маркеров qnxvar на web-странице на стороне клиента:
<!-- Show the current oven temperature --> <!-- #qnxvar format="<P>The oven temperature is %s degrees F." --> <!-- #qnxvar read="oven1 5" -->
Если температура печи в настоящее время составляет 500 градусов по шкале Фаренгейта, то выходные данные будут представлены следующим образом:
<P>The oven temperature is 500 degrees F.
Ниже приведен пример приложения, обеспечивающего мониторинг печи:
// Данная программа обеспечивает получение температуры печи// с последующим обновлением значения переменной в сервере данных,// считываемой web-сервером Slinger при наличии соответствующего маркера// на HTML-странице, обслуживаемой web-сервером Slinger.#include <stdlib.h>#include <stdio.h>#include <ds.h>#include <string.h>#define MAXLEN 4int main(void){ds_t ds_descriptor;char ovenID[7], oven_temp[MAXLEN], flag=0;int length = MAXLEN;ds_descriptor = ds_register();if ( ds_descriptor == -1 ){perror( "ds_register" );exit( 1 );}strcpy( ovenID, "oven1" );if ( ds_create( ds_descriptor, ovenID, flag, 0 ) == -1 ){perror( "ds_create" );exit( 1 );}// Получение начальной температуры печи// для инициализации переменной сервера данных// Копирование этого значения в переменную oven_temp с помощью функции strcpy.ds_set( ds_descriptor, ovenID, oven_temp, length );// Обновление температуры через определенный интервал.while( 1 )// Может потребоваться возможность принятия решения для выхода из программы.{// Получение текущей температуры печи.// Копирование этих временных показаний в переменную oven_temp с помощью функции strcpy.ds_set( ds_descriptor, ovenID, oven_temp, length );// Ожидание на протяжении предварительно определенного периода времени.}ds_clear( ds_descriptor, ovenID );ds_deregister( ds_descriptor );}
На HTML-странице с результатами отображается текущее значение температуры, сохраненное в сервере данных.
После завершения процесса переменная сервера данных становится недоступной, поскольку значением аргумента флаг, переданного для функции ds_create(), было значение 0
.
Если для данного приложения требуется обеспечить передачу определенных данных из текста HTML, то с помощью вызова функции ds_create() создается еще одна переменная. Данная переменная используется для передачи информации в приложение с помощью маркера qnxvar write в тексте HTML. Для передачи данных в приложение производится вызов функции ds_get() и/или оно реагирует на изменения в данных при получении импульса или сигнала.
Ниже приведено описание данной процедуры:
Сводная информация:
Для получения информации о маркере qnxvar см. описание утилиты slinger.
Базовые подсистемы ЗОСРВ «Нейтрино»
ds_clear(), ds_create(), ds_deregister(), ds_flags(), ds_get(), ds_register(), ds_set()
Предыдущий раздел: Сервисы