<!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>