Сущность 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
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}