# puts

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

## СИНТАКСИС

          puts ?-nonewline? ?channelId? string

## ОПИСАНИЕ

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

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

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

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

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