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