Открывает канал для связи с файлом или программой.
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).
Сложности при работе с 16-битовыми DOS-приложениями.
Также проблемы могут возникать при интерактивном выполнении Tcl, поскольку в этом случае консоль используется и для Tcl, и для порожденного подпроцесса.
Открытие последовательного порта не поддерживается.
Открытие командного конвейера также не поддерживается.
Обычно для открытия последовательного порта используется значение fileName /dev/ttyX, где X равно a или b, но можно также использовать любой псевдофайл, назначенный на соответствующий порт.
Проблемы могут возникать при интерактивном выполнении Tcl, поскольку в этом случае консоль используется и для Tcl, и для порожденного подпроцесса.