env
errorCode
errorInfo
Библиотека Tcl автоматически создает и управляет следующими глобальными переменными. Во всех случаях, кроме специально оговоренных, эти переменные должны использоваться приложениями и пользователями в режиме только для чтения.
env
Эта переменная задается Tcl в виде массива, элементами которого являются переменные окружения процесса. Чтение элемента даст значение соответствующей переменной окружения. Присвоение значения элементу массива присвоит новое значение переменной окружения или создаст ее, если она не была определена. Отмена (удаление) элемента массива
env удалит соответствующую переменную окружения. Изменения в массиве будут влиять на окружение, переданное дочерним процессам такими командами, как
exec. Если будет удален весь массив
env, то Tcl перестанет отслеживать обращения к
env и перестанет обновлять значения переменных окружения.
errorCode
После возникновения ошибки данная переменная будет определена для содержания дополнительной информации об ошибке в форме, удобной для обработки программами.
Переменная состоит из списка Tcl с одним или более элементами. Первый элемент списка идентифицирует общий класс ошибок и определяет формат остальной части списка. Ядро Tcl использует следующие ниже форматы errorCode, отдельные приложения могут задавать свои собственные форматы.
- CHILDKILLED pid sigName msg
Эта форма используется тогда, когда дочерний процесс был удален по сигналу. Элементами, начиная со второго, являются: идентификатор процесса (десятичное число); символическое имя сигнала, вызвавшего прекращение процесса; и короткое сообщение пользователю, описывающее сигнал, например для SIGPIPE: «Запись в конвейер без чтения».
- CHILDSTATUS pid code
Этот формат используется при окончании дочернего процесса с ненулевым статусом выхода. Второй элемент формата есть идентификатор процесса (десятичное число) и третий элемент есть код выхода, возвращенный процессом (тоже десятичное число).
- CHILDSUSP pid sigName msg
Формат используется при временной приостановке процесса по сигналу. Вторым элементом является:
- идентификатор процесса (десятичное число);
- символическое имя сигнала, вызвавшего приостановку процесса;
- короткое сообщение пользователю, описывающее сигнал, например: «Фоновое TTY чтение».
- NONE
Формат используется для ошибок, для которых нет никакой дополнительной информации, кроме сообщения, возвращенного вместе с ошибками. В таких случаях список errorCode будет состоять из одного элемента со значением NONE.
- UNIX errName msg
Если первый элемент
errorCode есть
UNIX, то это означает, что ошибка произошла во время обращения к ядру UNIX. Элемент
errName содержит символическое имя возникшей ошибки, например,
ENOENT; имена определены в файле errno.h. Элемент
msg есть соответствующее
errName сообщение пользователю, например, для случая
ENOENT: «Нет такого файла или каталога».
Для задания переменной
errorCode приложения должны использовать такие библиотечные процедуры, как
Tcl_SetErrorCode и
Tcl_UnixError, или использовать команду
error. Если ни один из этих способов не был использован, то после следующей ошибки интерпретатор Tcl установит переменную на
NONE.
errorlnfo
После возникновения ошибки эта строковая переменная будет содержать одну или более строк, идентифицирующих команды и процедуры Tcl, исполнявшиеся в момент возникновения самой последней ошибки. Ее содержимое принимает форму образа стека, со всеми вложенными командами Tcl, которые в момент возникновения ошибки не были закончены.