Глобальная или локальная статическая переменная для переменных среды оболочки

#c #environment-variables

#c #переменные среды

Вопрос:

Я реализую простую оболочку и хочу иметь возможность устанавливать переменные среды через оболочку. Используя простой синтаксис, такой как set var = hello

У меня есть подобная структура для представления одной переменной env:

 typedef struct {
    char *name;
    char *value;
}
  

Я подумываю о создании динамического массива вышеупомянутой структуры для хранения всех переменных среды. Проблема в том, что я не уверен, как это правильно реализовать.

Прямо сейчас я не уверен, должен ли я сделать массив статическим внутри функции или глобальной переменной. Какая из них была бы лучше? и почему?

Комментарии:

1. Почему бы просто не использовать setenv(3) или putenv(3) и не поместить настройку в среду вашей оболочки?

Ответ №1:

Это полностью зависит от того, откуда необходимо получить доступ к переменным. Если они нужны только в одной функции, то статическая локальная переменная имеет наибольший смысл. Если они необходимы «для всего файла», то наиболее разумным является глобальный файл (который все еще статичен). В противном случае глобальная.

Другим вариантом, лучшим для будущего расширения, было бы создать набор статических переменных файла с функциями доступа для получения и задания комбинаций имя / значение, и использовать этот API везде. Это позволяет вам позже изменить механизм хранения на что-то более эффективное, если, скажем, вам внезапно понадобилось сохранить множество пар имя / значения (скажем, в b-дереве вместо массива).