#c #environment-variables
#c #переменные среды
Вопрос:
Я реализую простую оболочку и хочу иметь возможность устанавливать переменные среды через оболочку. Используя простой синтаксис, такой как set var = hello
У меня есть подобная структура для представления одной переменной env:
typedef struct {
char *name;
char *value;
}
Я подумываю о создании динамического массива вышеупомянутой структуры для хранения всех переменных среды. Проблема в том, что я не уверен, как это правильно реализовать.
Прямо сейчас я не уверен, должен ли я сделать массив статическим внутри функции или глобальной переменной. Какая из них была бы лучше? и почему?
Комментарии:
1. Почему бы просто не использовать setenv(3) или putenv(3) и не поместить настройку в среду вашей оболочки?
Ответ №1:
Это полностью зависит от того, откуда необходимо получить доступ к переменным. Если они нужны только в одной функции, то статическая локальная переменная имеет наибольший смысл. Если они необходимы «для всего файла», то наиболее разумным является глобальный файл (который все еще статичен). В противном случае глобальная.
Другим вариантом, лучшим для будущего расширения, было бы создать набор статических переменных файла с функциями доступа для получения и задания комбинаций имя / значение, и использовать этот API везде. Это позволяет вам позже изменить механизм хранения на что-то более эффективное, если, скажем, вам внезапно понадобилось сохранить множество пар имя / значения (скажем, в b-дереве вместо массива).