<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN>
<html>
  <head>
    <title>puts</title>
  </head>

  <body>
    <h1>puts</h1>

    <p>Команда записывает данные в канал.</p>

    <h2>СИНТАКСИС</h2>

    <pre>
      <strong>puts</strong> ?<strong>-nonewline</strong>? ?<em>channelId</em>? <em>string</em>
    </pre>
    
    <h2>ОПИСАНИЕ</h2>

    <p>Записывает символы из аргумента <em>string</em> в канал
      <em>channelId</em>. Значение <em>channelId</em> должно быть
      идентификатором канала, который вернула предыдущая команда <a
      href=open.html><strong>open</strong></a> или <a href=
      socket.html><strong>socket</strong></a>. Соответствующий канал
      должен быть открыт на запись. Если аргумент <em>channelId</em> не
      указан, значение по умолчанию соответствует стандартному
      выводу. Команда <strong>puts</strong> обычно выдает после <em>string</em>
      символ новой строки, однако, если указана опция
      <strong>-nonewline</strong>, этого не происходит.</p>

    <p>Символы новой строки при выводе заменяются на
      последовательность, используемую на данной платформе (например,
      <strong>cr</strong> <strong>lf</strong> на Windows-платформах) в соответствии со
      значением опции канала <strong>-translation</strong>. Опция может быть
      изменена с помощью команды <a href=
      fconfigure.html><strong>fconfigure</strong></a>.</p>

    <p>Tcl осуществляет вывод через буфер. Поэтому символы, выданные
      командой <strong>puts</strong>, могут и не появиться сразу в выходном
      устройстве или в файле. Обычно вывод откладывается до заполнения
      буфера или закрытия канала. Чтобы обеспечить немедленную выдачу
      данных, можно использовать команду <a
      href=flush.html><strong>flush</strong></a>.</p>

    <p>Когда буфер заполнится, команда <strong>puts</strong> обычно блокирует
      процесс до тех пор, пока все данные не будут переданы
      операционной системе для дальнейшего вывода. Если канал
      <em>channelId</em> открыт в неблокирующем режиме, процесс не
      блокируется, даже если операционная система еще не приняла
      данные. Tcl в этом случае продолжает складывать данные в буфер и
      в фоновом режиме передает их в соответствующий файл или
      устройство с той скоростью, с которой они могут принять
      данные. Чтобы работа в неблокирующем режиме была возможна,
      необходимо, чтобы был запущен обработчик событий.</p>

    <p>При работе в неблокирующем режиме возможен рост буфера, под
      который будет выделен неоправданно большой объем памяти.  Чтобы
      избежать этого, неблокирующие операции ввода/вывода лучше делать
      управляемыми по событиям. При этом новая порция данных не будет
      передаваться в буфер, пока канал не будет готов к ее приему.</p>

  </body>
</html>