# open

Открывает канал для связи с файлом или программой.

## СИНТАКСИС

          open fileName
          open fileName access
          open fileName access permissions

## ОПИСАНИЕ

Эта команда открывает файл, последовательный порт или командный конвейер и возвращает идентификатор канала, который может использоваться в дальнейшем в таких командах, как read, puts и close. Если первый символ атрибута fileName не равен |, то команда отрывает файл fileName, соответственно значение аргумента fileName должно соответствовать обычным соглашениям, описанным в п. filename.

Аргумент access, если он используется, указывает разрешенные режимы доступа к файлу. Аргумент access может указываться в одной из двух нотаций. В первой он может иметь следующие значения:

r | Открывает файл только на чтение. Это значение по умолчанию.
r+ | Открывает файл на чтение и запись. Файл должен существовать.
w | Открывает файл только на запись. Удаляет содержимое файла, если он существовал. Если нет, то создает новый файл.
w+ | Открывает файл на чтение и запись. Удаляет содержимое файла, если он существовал. Если нет, то создает новый файл.
a | Открывает файл на чтение. Файл должен существовать. Новые данные записываются в конец файла.
a+ | Открывает файл на чтение и запись. Если файл не существует, создает новый файл. Новые данные записываются в конец файла.

Во второй нотации аргумент access может содержать набор из флагов, описанных ниже. Среди флагов обязательно должен быть один из следующих: RDONLY, WRONLY или RDWR.

RDONLY | Открывает файл только на чтение.
WRONLY | Открывает файл только на запись
RDWR | Открывает файл на чтение и запись.
APPEND | Переставляет указатель в конец файла перед каждой записью.
CREAT | Создает файл, если он не существует. Без этого флага попытка открыть несуществующий флаг приведет к ошибке.
EXCL | Если указан также флаг CREAT, то будет сгенерирована ошибка, если файл уже существует.
NOCTTY | Если файл открыт для терминального устройства, этот флаг не позволяет ему стать управляющим терминалом процесса.
NONBLOCK | Позволяет в неблокирующем режиме открыть файл и, возможно, выполнять в этом режиме последующие операции ввода/вывода. Последствия использования этого флага зависят от платформы и устройства. Предпочтительнее вместо него использовать команду fconfigure. Конкретные особенности использования флага описаны в руководстве по вашей операционной системе, системный вызов open, флаг O_NONBLOCK.
TRUNC | Если файл существует, то его содержимое удаляется.

Если файл создается при выполнении команды open, то аргумент permissions (целое число) используется для установки прав доступа к вновь созданному файлу. Значение по умолчанию 0666.

## КОМАНДНЫЙ КОНВЕЙЕР

Если первый символ в fileName |'', то считается, что остальные символы описывают командный конвейер, который запускается так же, как командой exec. В этом случае идентификатор открытого канала может использоваться для ввода информации в стандартный ввод запущенного конвейера или для чтения его стандартного вывода в зависимости от значения аргумента access. Если канал открыть только на запись, то стандартный вывод конвейера направляется на текущий стандартный вывод (если он не перенаправлен в конвейере). Если канал открыт только на чтение, стандартный ввод для конвейера берется из текущего стандартного ввода (если он не перенаправлен в конвейере).

## ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ

Если аргумент fileName указывает на параллельный порт, то соответствующий порт открывается и инициализируется (реальные действия в зависимости от платформы). Допустимые значения fileName для различных платформ см. Особенности реализации на различных платформах.

## КОНФИГУРИРОВАНИЕ

Команда fconfigure может быть использована для определения и изменения текущей конфигурации канала. Для последовательного порта можно использовать следующие опции.

-mode baud,parity,data,stop

Эта опция включает 4 величины, записанные через запятую.

baud - число, скорость передачи данных в Бодах (бит в секунду);

parity - четность, может принимать одно из значений n (none), o (odd), e (even), m (mark), s (space);

data - число бит данных (целое от 5 до 8);

stop - число стоп битов (целое 1 или 2).

## ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА РАЗЛИЧНЫХ ПЛАТФОРМАХ

Windows (все версии)
  Аргумент fileName для сериальных портов должен иметь форму comX, где X - число (обычно, от 1 до 4). Попытка открыть несуществующий порт приводит к ошибке.
Windows NT
  Проблемы могут возникать при интерактивном выполнении Tcl, поскольку в этом случае консоль используется и для Tcl, и для порожденного подпроцесса.
Windows 95

  Сложности при работе с 16-битовыми DOS-приложениями.

  Также проблемы могут возникать при интерактивном выполнении Tcl, поскольку в этом случае консоль используется и для Tcl, и для порожденного подпроцесса.

Windows 3.X
  Те же проблемы, что и при выполнении команды exec.
Macintosh

  Открытие последовательного порта не поддерживается.

  Открытие командного конвейера также не поддерживается.

Unix

  Обычно для открытия последовательного порта используется значение fileName /dev/ttyX, где X равно a или b, но можно также использовать любой псевдофайл, назначенный на соответствующий порт.

  Проблемы могут возникать при интерактивном выполнении Tcl, поскольку в этом случае консоль используется и для Tcl, и для порожденного подпроцесса.