Справочник Ada 2005
A.17 Пакет Environment_Variables
Пакет Environment_Variables позволяет программе читать или изменять переменные среды. Переменные среды — это пары имя-значение, где и имя, и значение являются строками. Определение того, что представляет собой переменная среды, а также значение имени и значения, определяются реализацией.
Статическая семантика
В библиотечном пакете Environment_Variables есть следующее объявление:
package Ada.Environment_Variables is
pragma Preelaborate(Environment_Variables);
pragma Preelaborate(Environment_Variables);
function Value (Name : in String) return String;
function Exists (Name : in String) return Boolean;
procedure Set (Name : in String; Value : in String);
procedure Clear (Name : in String);
procedure Clear;
procedure Clear;
procedure Iterate (
Process : not null access procedure (Name, Value : in String));
Process : not null access procedure (Name, Value : in String));
end Ada.Environment_Variables;
function Value (Name : in String) return String;
Если внешняя среда выполнения поддерживает переменные среды, то Value возвращает значение переменной среды с заданным именем. Если переменная среды с заданным именем не существует, то возникает ошибка Constraint_Error. Если среда выполнения не поддерживает переменные среды, то возникает ошибка Program_Error.
function Exists (Name : in String) return Boolean;
Если внешняя среда выполнения поддерживает переменные среды и переменная среды с заданным именем в данный момент существует, то Exists возвращает True; в противном случае возвращает False.
procedure Set (Name : in String; Value : in String);
Если внешняя среда выполнения поддерживает переменные среды, то Set сначала очищает любую существующую переменную среды с заданным именем, а затем определяет новую переменную среды с заданным именем и значением. В противном случае возникает ошибка Program_Error.
Если по определению реализации невозможно определить переменную среды с заданным именем и значением, то возникает ошибка Constraint_Error.
Определяется реализацией, существуют ли значения, для которых вызов Set(Name, Value) имеет тот же эффект, что и Clear (Name).
procedure Clear (Name : in String);
Если внешняя среда выполнения поддерживает переменные среды, то Clear удаляет все существующие переменные среды с заданным именем. В противном случае возникает ошибка Program_Error.
procedure Clear;
Если внешняя среда выполнения поддерживает переменные среды, то Clear удаляет все существующие переменные среды. В противном случае возникает ошибка Program_Error.
procedure Iterate (
Process : not null access procedure (Name, Value : in String));
Process : not null access procedure (Name, Value : in String));
Если внешняя среда выполнения поддерживает переменные среды, то Iterate вызывает подпрограмму, указанную в Process, для каждой существующей переменной среды, передавая имя и значение этой переменной. В противном случае возникает ошибка Program_Error.
Если существует несколько переменных среды с одинаковым именем, Process вызывается один раз для каждой такой переменной.
Ошибки с ограниченной продолжительностью (время выполнения)
Вызов Value является ошибкой с ограниченной продолжительностью, если существует более одной переменной среды с данным именем; возможные результаты:
- возвращается одно из значений, и это же значение возвращается при последующих вызовах в отсутствие изменений в среде; или
- возникает ошибка Program_Error.
Ошибка выполнения
Одновременный вызов процедур Set или Clear с вызовами любой подпрограммы пакета Environment_Variables или любого экземпляра Iterate приводит к ошибке выполнения.
Вызов процедур Set или Clear в фактической подпрограмме, соответствующей параметру Process в Iterate, приводит к ошибке выполнения.
Требования к документации
Реализация должна документировать поведение операций этого пакета, если переменные среды изменяются внешними механизмами (например, вызовом сервисов операционной системы).
Разрешения реализации
Реализации, работающие на системе, которая не поддерживает переменные среды, разрешается определять операции пакета Environment_Variables со смыслом, соответствующим случаю, когда внешняя среда выполнения поддерживает переменные среды. В этом случае она должна предоставить механизм для инициализации непустого набора переменных среды до начала выполнения раздела.
Рекомендации по реализации
Если среда выполнения поддерживает дочерние процессы, то текущие определенные переменные среды должны использоваться для инициализации переменных среды дочернего процесса.
Изменения переменных среды, сделанные за пределами управления этим пакетом, должны немедленно отражаться на действии операций этого пакета. Изменения переменных среды, сделанные с помощью этого пакета, должны немедленно отражаться во внешней среде выполнения. Этот пакет не должен выполнять буферизацию переменных среды.