Копирует данные из одного канала в другой.
СИНТАКСИС
Команда fcopy передает данные из канала inchan, пока не будет достигнут конец файла или не будет передано size байтов. Если аргумент -size не задан, передается весь файл. Если опция -command не задана, команда блокирует процесс до завершения копирования и возвращает число переданных байтов.
При наличии аргумента -command команда fcopy работает в фоновом режиме. Она завершается немедленно, а команда callback вызывается позже, когда завершается процесс копирования. Команда callback вызывается с одним или двумя дополнительными аргументами, которые указывают число переданных байтов. Если при исполнении фонового процесса произошла ошибка, второй аргумент — строка описания ошибки. При фоновом выполнении копирования каналы inchan и outchan не обязательно открывать в неблокирующем режиме, команда fcopy выполнит это автоматически. Однако при этом необходимо организовать обработку событий, например, с помощью команды vwait или используя Tk.
Не допускается выполнение других операций ввода — вывода с теми же каналами во время фонового копирования. Если один из каналов во время копирования будет закрыт, процесс копирования будет прерван и вызова команды callback не произойдет. Если будет закрыт канал ввода данных, то все полученные данные, хранящиеся в очереди, будут выданы в выходной канал.
Необходимо отметить, что канал inchan может стать открытым на чтение во время копирования. Все обработчики файловых событий во время фонового копирования должны быть выключены, чтобы они не создавали помех копированию. Любые попытки ввода — вывода с помощью обработчиков файловых событий будут завершены с ошибкой “канал занят”.
Команда fcopy преобразует символы конца
строк в соответствии со значениями опций -translation для соответствующих
каналов (см. описание команды fconfigure).
Преобразование означает, в частности, что число прочитанных и число переданных
символов может отличаться. В синхронном режиме команда возвращает только число
переданных в outchan канал символов. В фоновом режиме только это число
подается на вход команды callback.