Служебная сущность 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}
В начало