seek
Имя
seek — Изменение позиции доступа для открытого каналаСинтаксис
seek channelId offset ?origin?Описание
Изменяет текущую позицию доступа для channelId.ChannelId должен быть идентификатором открытого канала, например, стандартного канала Tcl (stdin, stdout или stderr), результата вызова open или socket, или результата команды создания канала, предоставленной расширением Tcl.
Аргументы offset и origin задают позицию, в которой произойдет следующее чтение или запись для channelId. Offset должен быть целым числом (может быть отрицательным), а origin должен быть одним из следующих:
- start
- Новая позиция доступа будет на offset байтах от начала базового файла или устройства.
- current
- Новая позиция доступа будет на offset байтах от текущей позиции доступа; отрицательное offset перемещает позицию доступа назад в базовом файле или устройстве.
- end
- Новая позиция доступа будет на offset байтах от конца файла или устройства. Отрицательное offset помещает позицию доступа перед концом файла, а положительное offset - после конца файла.
Аргумент origin по умолчанию равен start.
Команда сбрасывает все буферизованные данные вывода для канала перед возвратом, даже если канал находится в режиме без блокировки. Она также отбрасывает любые буферизованные и непрочитанные данные ввода. Эта команда возвращает пустую строку. Возникает ошибка, если эта команда применяется к каналам, чьи базовые файлы или устройства не поддерживают перемещение.
Обратите внимание, что значения offset представляют смещение в байтах, а не в символах. Как seek, так и tell работают с байтами, а не с символами, в отличие от read.
Примеры
Прочитать файл дважды:set f [open file.txt] set data1 [read $f] seek $f 0 set data2 [read $f] close $f # $data1 eq $data2 if the file wasn't updated
Прочитать последние 10 байт из файла:
set f [open file.data] # This is guaranteed to work with binary data but # may fail with other encodings... fconfigure $f -translation binary seek $f -10 end set data [read $f 10] close $f
См. также
file, open, close, gets, tell, Tcl_StandardChannels
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/seek.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/seek.htm