66 lines
5.8 KiB
HTML
66 lines
5.8 KiB
HTML
|
<HTML><HEAD>
|
|||
|
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
|
|||
|
</HEAD>
|
|||
|
<BODY>
|
|||
|
<div><H3><b>fcopy Commandes Internes Tcl</b></H3></div>
|
|||
|
<HR ALIGN="center">
|
|||
|
<div><b>NOM</b></div> <br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">fcopy - Copie des donn<6E>es d'un canal <20> un autre.
|
|||
|
</div> <br>
|
|||
|
<div><b>SYNTAXE</b></div> <br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;"><b>fcopy </b><i>inchan</i> <i>outchan</i> ?<b>-size </b><i>size</i>? ?<b>-command </b><i>callback</i>?
|
|||
|
</div><br>
|
|||
|
<div><b>DESCRIPTION</b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">La commande <b>fcopy</b> copie donn<6E>es d'un canal I/O, <i>inchan</i> <20> un autre canal I/O, <i>outchan</i>. La commande <b>fcopy</b> force la mise en tampon dans le syst<73>me I/O Tcl pour <20>viter une copie suppl<70>mentaire et pour <20>viter la mise en tampon de trop de donn<6E>es en m<>moire pendant la copie de gros fichiers vers des destinations lentes comme les sockets r<>seau. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">La commande <b>fcopy</b> transf<73>re les donn<6E>es de <i>inchan</i> jusqu'a la fin du fichier ou bien que <i>size</i> octets aient <20>t<EFBFBD> transf<73>r<EFBFBD>s. Si aucun argument <b>-size</b> n'est donn<6E>, alors la copie va jusqu'a la fin du fichier. Toute les donn<6E>es lues <20> partir de <i>inchan</i> sont copi<70>es vers <i>outchan</i>. Sans l'option<b> -command</b>, <b>fcopy</b> bloque jusqu'a ce que la copie soit compl<70>te et retourne le nombre d'octets <20>crits dans <i>outchan</i>. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument <b>-command</b> fait travailler <b>fcopy</b> en arri<72>re-plan. Dans ce cas elle retourne imm<6D>diatement et le <i>callback</i> est appel<65> plus tard quand la copie se termine. Le <i>callback</i> est appel<65> avec un ou deux arguments suppl<70>mentaire qui indique combien d'octets ont <20>t<EFBFBD> <20>crits dans <i>outchan</i>. Si une erreur s'est produite pendant la copie en arri<72>re-plan, le second argument est la cha<68>ne associ<63>e <20> l'erreur. Avec une copie en arri<72>re-plan, it n'est pas n<>cessaire de mettre <i>inchan</i> ou <i>outchan</i> dans un mode non-bloquant; la commande <b>fcopy</b> en prend soin de automatiquement. N<>anmoins, il est n<>cessaire d'entrer dans la boucle d'<27>v<EFBFBD>nement en utilisant la commande <A HREF="180.htm"><b>vwait</b></A> ou en utilisant Tk. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Vous n'<27>tes pas autoris<69>s <20> faire d'autre op<6F>rations I/O avec <i>inchan</i> ou <i>outchan</i> pendant une <b>fcopy</b> en arri<72>re-plan. Si soit <i>inchan</i> soit <i>outchan</i> est ferm<72> pendant la copie est en cours, la copie courante est stopp<70>e et le callback n'est <i>pas</i> fait. Si <i>inchan</i> est ferm<72>, alors toutes les donn<6E>es d<>j<EFBFBD> en file pour <i>outchan</i> sont <20>crites. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Notez que <i>inchan</i> peut devenir lisible pendant une copie en arri<72>re-plan. Vous devez arr<72>ter quelconque gestionnaires <A HREF="112.htm"><b>fileevent</b></A> pendant une copie en arri<72>re-plan ainsi ces gestionnaires n' interf<72>reront pas avec la copie. N'importe quel I/O tent<6E> par un gestionnaire <A HREF="112.htm"><b>fileevent</b></A> aura une erreur " canal busy". </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;"><b>Fcopy</b> traduit les s<>quences de fin de ligne de <i>inchan</i> et <i>outchan</i> en accord avec l'option <b>-translation</b> pour ces canaux. Voir la page de manuel de <A HREF="109.htm"><b>fconfigure</b></A> pour des d<>tails sur l'option<b> -translation</b>. Les traductions signifient que le nombre d'octets lus de <i>inchan</i> peut <20>tre diff<66>rent du nombre d'octets <20>crits <20> <i>outchan</i>. Seul le nombre d'octets <20>crits sur <i>outchan</i> est rapport<72>, soit comme la valeur de retour d'un <b>fcopy</b> synchrone ou comme l'argument du callback pour un <b>fcopy</b> asynchrone. <br>
|
|||
|
</div>
|
|||
|
<div><b>EXEMPLE</b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Ce premier exemple montre comment le callback r<>cup<75>re le nombre d'octets transf<73>r<EFBFBD>. Il aussi utilise vwait pour placer l'application dans la boucle d'<27>v<EFBFBD>nement. Bien sur, cet exemple simplifi<66> pourrait <20>tre fait sans la commande callback. </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 102px;">proc Cleanup {in out bytes {error {}}} {<br>
|
|||
|
global total<br>
|
|||
|
set total $bytes<br>
|
|||
|
close $in<br>
|
|||
|
close $out<br>
|
|||
|
if {[string length $error] != 0} {<br>
|
|||
|
# l'erreur s'est produite pendant la copie<br>
|
|||
|
}<br>
|
|||
|
}<br>
|
|||
|
set in [open $file1]<br>
|
|||
|
set out [socket $serveur $port]<br>
|
|||
|
fcopy $in $out -command [liste Cleanup $in $out]<br>
|
|||
|
vwait total<br>
|
|||
|
<br>
|
|||
|
</div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Le second exemple copie par tranches et teste la fin de fichier dans la commande callback </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 102px;">proc CopyMore {in out chunk bytes {error {}}} {<br>
|
|||
|
global total done<br>
|
|||
|
incr total $ bytes<br>
|
|||
|
if {([string length $error] != 0) || [eof $in] {<br>
|
|||
|
set done $total<br>
|
|||
|
close $in<br>
|
|||
|
close $out<br>
|
|||
|
} else {<br>
|
|||
|
fcopy $in $out -command [list CopyMore $in $out $chunk] \<br>
|
|||
|
-size $chunk<br>
|
|||
|
}<br>
|
|||
|
}<br>
|
|||
|
set in [open $file1]<br>
|
|||
|
set out [socket $serveur $port]<br>
|
|||
|
set chunk 1024<br>
|
|||
|
set total 0<br>
|
|||
|
fcopy $in $out -command [list CopyMore $in $out $chunk] -size $chunk<br>
|
|||
|
vwait done<br>
|
|||
|
<br>
|
|||
|
</div>
|
|||
|
<div><b>VOIR EGALEMENT</b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;"><A HREF="102.htm">eof</A>(n), <A HREF="108.htm">fblocked</A>(n), <A HREF="109.htm">fconfigure</A>(n) </div><br>
|
|||
|
<div>Derni<EFBFBD>re r<>vision: 8.0</div>
|
|||
|
<br>
|
|||
|
<br><div ALIGN="CENTER"><A HREF="index.htm"><b>Index</b></A> <A HREF="109.htm"><b>Pr<EFBFBD>c<EFBFBD>dent</b></A> <A HREF="111.htm"><b>Suivant</b></A>
|
|||
|
</div>
|
|||
|
</BODY></HTML>
|