KasperskyOS Community Edition 1.0

Сущность Env

Служебная сущность Env предназначена для передачи запускаемым сущностям аргументов и переменных окружения. При запуске каждая сущность автоматически отправляет запрос сущности Env и получает необходимые данные.

Включение сущности Env в решение позволяет монтировать файловые системы при запуске VFS, соединять одну клиентскую сущность с двумя сущностями VFS и решать многие другие задачи.

Чтобы использовать сущность Env в своем решении, необходимо:

1. Разработать код сущности Env, используя макросы из env/env.h.

2. Собрать образ сущности, скомпоновав ее с библиотекой env_server.

3. В init-описании указать, что необходимо запустить сущность Env и соединить с ней выбранные сущности (Env при этом является сервером). Имя канала задается макросом ENV_SERVICE_NAME, объявленным в файле env/env.h.

4. Включить образ сущности Env в образ решения.

Код сущности Env

В коде сущности Env используются следующие макросы и функции, объявленные в файле env/env.h:

  • ENV_REGISTER_ARGS(name,argarr) – сущности с именем name будут переданы аргументы из массива argarr;
  • ENV_REGISTER_VARS(name,envarr) – сущности с именем name будут переданы переменные окружения из массива envarr;
  • ENV_REGISTER_PROGRAM_ENVIRONMENT(name,argarr,envarr) – сущности с именем name будут переданы как аргументы, так и переменные окружения;
  • envServerRun() – инициализировать серверную часть сущности, чтобы она могла отвечать на запросы.

Пример:

env.c

#include <env/env.h>

#include <stdlib.h>

int main(int argc, char** argv)

{

const char* NetVfsArgs[] = {

"-l", "devfs /dev devfs 0",

"-l", "romfs /etc romfs 0"

};

ENV_REGISTER_ARGS("VFS", NetVfsArgs);

envServerRun();

return EXIT_SUCCESS;

}

Пример init.yaml для использования сущности Env

В следующем примере сущность Client будет соединена с сущностью Env, образ которой находится в папке env:

init.yaml

entities:

- name: env.Env

- name: Client

connections:

- target: env.Env

id: {var: ENV_SERVICE_NAME, include: env/env.h}