Fcopy

From Base de connaissances eggdrops & TCL
Jump to: navigation, search


Syntaxe

fcopy inchan outchan ?-size size? ?-command callback?

Description

Notez que inchan peut devenir lisible pendant une copie en arrière-plan. Vous devez arrêter quelconque gestionnaires fileevent pendant une copie en arrière-plan ainsi ces gestionnaires n' interfèreront pas avec la copie. N'importe quel I/O tenté par un gestionnaire fileevent aura une erreur " canal busy".


Exemple

Ce premier exemple montre comment le callback récupère le nombre d'octets transféré. Il aussi utilise vwait pour placer l'application dans la boucle d'évènement. Bien sur, cet exemple simplifié pourrait être fait sans la commande callback.

proc Cleanup {in out bytes {error {}}} {
   global total
   set total $bytes
   close $in
   close $out
   if {[string length $error] != 0} {
      # l'erreur s'est produite pendant la copie
   }
}
set in [open $file1]
set out [socket $serveur $port]
fcopy $in $out -command [liste Cleanup $in $out] vwait total

Le second exemple copie par tranches et teste la fin de fichier dans la commande callback

proc CopyMore {in out chunk bytes {error {}}} {
   global total done
   incr total $bytes
   if {([string length $error] != 0) || [eof $in]} {
      set done $total close $in close $out
   } else {
      fcopy $in $out -command [list CopyMore $in $out $chunk] \ -size $chunk
   }
}
set in [open $file1]
set out [socket $serveur $port]
set chunk 1024
set total 0
fcopy $in $out -command [list CopyMore $in $out $chunk] -size $chunk
vwait
done

Voir également

open, exec, puts, flush, gets, read, eof, close, socket, seek, tell, fconfigure, fblocked