read
Имя
read — Чтение из каналаСинтаксис
read ?-nonewline? channelIdread channelId numChars
Описание
В первом варианте команда read считывает все данные из канала channelId до конца файла. Если переключатель -nonewline указан, последний символ файла отбрасывается, если он является символом новой строки. Во втором варианте дополнительный аргумент указывает количество символов для считывания. Будет считано и возвращено ровно столько символов, если в файле остаётся меньше, чем numChars символов, то возвращаются все оставшиеся символы. Если канал настроен на использование многобайтовой кодировки, то количество считанных символов может не совпадать с количеством считанных байтов.ChannelId должен быть идентификатором открытого канала, например, стандартного канала ввода Tcl (stdin), значения, возвращаемого вызовом open или socket, или результата команды создания канала, предоставляемой расширением Tcl. Канал должен быть открыт для ввода.
Если channelId находится в режиме без блокировки, команда может не прочитать столько символов, сколько запрошено: после считывания всех доступных данных команда вернёт имеющиеся данные, а не будет блокироваться, ожидая дополнительный ввод. Если канал настроен на использование многобайтовой кодировки, то в буферах могут оставаться некоторые байты, которые не образуют полный символ. Эти байты не будут возвращены, пока не будет доступен полный символ или не будет достигнут конец файла. Переключатель -nonewline игнорируется, если команда возвращает результат до достижения конца файла.
Read преобразует последовательности символов конца строки во входных данных в символы новой строки в соответствии с параметром -translation для канала. Смотрите руководство по fconfigure для обсуждения способов, которыми fconfigure будет изменять ввод.
Использование с последовательными портами
Для большинства приложений канал, подключенный к последовательному порту, должен быть настроен на режим без блокировки: fconfigure channelId -blocking 0. Тогда read будет вести себя так, как описано выше. Следует соблюдать осторожность при использовании read с блокирующими последовательными портами:- read channelId numChars
- В этом варианте read блокируется до тех пор, пока не будет получено numChars символов с последовательного порта.
- read channelId
- В этом варианте read блокируется до получения символа конца файла, см. fconfigure -eofchar. Если для канала не был сконфигурирован символ конца файла, то read будет блокироваться вечно.
Пример
Этот пример кода читает файл целиком и разбивает его на список, где каждая строка в файле соответствует элементу в списке:set fl [open /proc/meminfo] set data [read $fl] close $fl set lines [split $data \n]
См. также
file, eof, fblocked, fconfigure, Tcl_StandardChannels
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/read.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/read.htm