<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN> <html> <head> <title>open</title> </head> <body> <h1>open</h1> <p>Открывает канал для связи с файлом или программой.</p> <h2>СИНТАКСИС</h2> <pre> <strong>open</strong> <em>fileName</em> <strong>open</strong> <em>fileName</em> <em>access</em> <strong>open</strong> <em>fileName</em> <em>access</em> <em>permissions</em> </pre> <h2>ОПИСАНИЕ</h2> <p>Эта команда открывает файл, последовательный порт или командный конвейер и возвращает идентификатор канала, который может использоваться в дальнейшем в таких командах, как <a href=read.html><strong>read</strong></a>, <a href=puts.html><strong>puts</strong></a> и <a href=close.html><strong>close</strong></a>. Если первый символ атрибута <em>fileName</em> не равен <strong>|</strong>, то команда отрывает файл <em>fileName</em>, соответственно значение аргумента fileName должно соответствовать обычным соглашениям, описанным в п. <a href=filename.html><strong>filename</strong></a>.</p> <p>Аргумент <em>access</em>, если он используется, указывает разрешенные режимы доступа к файлу. Аргумент <em>access</em> может указываться в одной из двух нотаций. В первой он может иметь следующие значения:</p> <table cellpadding=7 width=85%> <tr> <td><strong>r</strong></td> <td>Открывает файл только на чтение. Это значение по умолчанию.</td> </tr> <tr> <td><strong>r+</strong></td> <td>Открывает файл на чтение и запись. Файл должен существовать.</td> </tr> <tr> <td><strong>w</strong></td> <td>Открывает файл только на запись. Удаляет содержимое файла, если он существовал. Если нет, то создает новый файл.</td> </tr> <tr> <td><strong>w+</strong></td> <td>Открывает файл на чтение и запись. Удаляет содержимое файла, если он существовал. Если нет, то создает новый файл.</td> </tr> <tr> <td><strong>a</strong></td> <td>Открывает файл на чтение. Файл должен существовать. Новые данные записываются в конец файла.</td> </tr> <tr> <td><strong>a+</strong></td> <td>Открывает файл на чтение и запись. Если файл не существует, создает новый файл. Новые данные записываются в конец файла.</td> </tr> </table> <p>Во второй нотации аргумент <em>access</em> может содержать набор из флагов, описанных ниже. Среди флагов обязательно должен быть один из следующих: <strong>RDONLY</strong>, <strong>WRONLY</strong> или <strong>RDWR</strong>.</p> <table> <tr> <td><strong>RDONLY</strong></td> <td>Открывает файл только на чтение.</td> </tr> <tr> <td><strong>WRONLY</strong></td> <td>Открывает файл только на запись</td> </tr> <tr> <td><strong>RDWR</strong></td> <td>Открывает файл на чтение и запись.</td> </tr> <tr> <td><strong>APPEND</strong></td> <td>Переставляет указатель в конец файла перед каждой записью.</td> </tr> <tr> <td><strong>CREAT</strong></td> <td>Создает файл, если он не существует. Без этого флага попытка открыть несуществующий флаг приведет к ошибке.</td> </tr> <tr> <td><strong>EXCL</strong></td> <td>Если указан также флаг <strong>CREAT</strong>, то будет сгенерирована ошибка, если файл уже существует.</td> </tr> <tr> <td><strong>NOCTTY</strong></td> <td>Если файл открыт для терминального устройства, этот флаг не позволяет ему стать управляющим терминалом процесса.</td> </tr> <tr> <td><strong>NONBLOCK</strong></td> <td>Позволяет в неблокирующем режиме открыть файл и, возможно, выполнять в этом режиме последующие операции ввода/вывода. Последствия использования этого флага зависят от платформы и устройства. Предпочтительнее вместо него использовать команду <a href= fconfigure.html><strong>fconfigure</strong></a>. Конкретные особенности использования флага описаны в руководстве по вашей операционной системе, системный вызов <a href=open.html><strong>open</strong></a>, флаг <strong> O_NONBLOCK</strong>. </td> </tr> <tr> <td><strong>TRUNC</strong></td> <td>Если файл существует, то его содержимое удаляется.</td> </tr> </table> <p>Если файл создается при выполнении команды <strong>open</strong>, то аргумент <em>permissions</em> (целое число) используется для установки прав доступа к вновь созданному файлу. Значение по умолчанию <strong>0666</strong>.</p> <h2><a name=КОМАНДНЫЙ КОНВЕЙЕР></a>КОМАНДНЫЙ КОНВЕЙЕР</h2> <p>Если первый символ в <em>fileName</em> <strong>|</strong>'', то считается, что остальные символы описывают командный конвейер, который запускается так же, как командой <strong><a href=exec.html>exec</a></strong>. В этом случае идентификатор открытого канала может использоваться для ввода информации в стандартный ввод запущенного конвейера или для чтения его стандартного вывода в зависимости от значения аргумента <em>access</em>. Если канал открыть только на запись, то стандартный вывод конвейера направляется на текущий стандартный вывод (если он не перенаправлен в конвейере). Если канал открыт только на чтение, стандартный ввод для конвейера берется из текущего стандартного ввода (если он не перенаправлен в конвейере).</p> <h2><a name=ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ></a>ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ</h2> <p>Если аргумент <em>fileName</em> указывает на параллельный порт, то соответствующий порт открывается и инициализируется (реальные действия в зависимости от платформы). Допустимые значения <em>fileName</em> для различных платформ см. <a href= #ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА РАЗЛИЧНЫХ ПЛАТФОРМАХ> Особенности реализации на различных платформах</a>.</p> <h2><a name=КОНФИГУРИРОВАНИЕ></a>КОНФИГУРИРОВАНИЕ</h2> <p>Команда <strong><a href=fconfigure.html>fconfigure</a></strong> может быть использована для определения и изменения текущей конфигурации канала. Для последовательного порта можно использовать следующие опции.</p> <p><strong>-mode</strong> <em>baud</em>,<em>parity</em>,<em>data</em>,<em>stop</em></p> <p>Эта опция включает 4 величины, записанные через запятую.</p> <p><em>baud</em> - число, скорость передачи данных в Бодах (бит в секунду);</p> <p><em>parity</em> - четность, может принимать одно из значений <strong>n</strong> (none), <strong>o</strong> (odd), <strong>e</strong> (even), <strong>m</strong> (mark), <strong>s</strong> (space);</p> <p><em>data</em> - число бит данных (целое от 5 до 8);</p> <p><em>stop</em> - число стоп битов (целое 1 или 2).</p> <h2><a name=ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА РАЗЛИЧНЫХ ПЛАТФОРМАХ></a> ОСОБЕННОСТИ РЕАЛИЗАЦИИ НА РАЗЛИЧНЫХ ПЛАТФОРМАХ</h2> <dl> <dt><strong>Windows</strong> (все версии)</dt> <dd>Аргумент <em>fileName</em> для сериальных портов должен иметь форму <strong>comX</strong>, где <em>X</em> - число (обычно, от 1 до 4). Попытка открыть несуществующий порт приводит к ошибке.</dd> <dt><strong>Windows NT</strong></dt> <dd>Проблемы могут возникать при интерактивном выполнении Tcl, поскольку в этом случае консоль используется и для Tcl, и для порожденного подпроцесса.</dd> <dt><strong>Windows 95</strong></dt> <dd><p>Сложности при работе с 16-битовыми DOS-приложениями.</p> <p>Также проблемы могут возникать при интерактивном выполнении Tcl, поскольку в этом случае консоль используется и для Tcl, и для порожденного подпроцесса.</p> </dd> <dt><strong>Windows 3.X</strong></dt> <dd>Те же проблемы, что и при выполнении команды <a href=exec.html><strong>exec</strong></a>.</dd> <dt><strong>Macintosh</strong></dt> <dd><p>Открытие последовательного порта не поддерживается.</p> <p>Открытие командного конвейера также не поддерживается.</p> </dd> <dt><strong>Unix</strong></dt> <dd><p>Обычно для открытия последовательного порта используется значение <em>fileName</em> <strong>/dev/ttyX</strong>, где <em>X</em> равно <strong>a</strong> или <strong>b</strong>, но можно также использовать любой псевдофайл, назначенный на соответствующий порт.</p> <p>Проблемы могут возникать при интерактивном выполнении Tcl, поскольку в этом случае консоль используется и для Tcl, и для порожденного подпроцесса.</p> </dd> </dl> </body> </html>