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, и для порожденного подпроцесса.