projman/hlp/fr/tcl/fcopy.htm

66 lines
5.8 KiB
HTML
Raw Normal View History

2015-10-19 13:27:31 +03:00
<HTML><HEAD>
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
</HEAD>
<BODY>
<div><H3><b>fcopy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;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 &quot; canal busy&quot;. </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 &#123;in out bytes &#123;error &#123;}}} &#123;<br>
global total<br>
set total &#36;bytes<br>
close &#36;in<br>
close &#36;out<br>
if &#123;&#91;string length &#36;error] != 0} &#123;<br>
# l'erreur s'est produite pendant la copie<br>
}<br>
}<br>
set in &#91;open &#36;file1]<br>
set out &#91;socket &#36;serveur &#36;port]<br>
fcopy &#36;in &#36;out -command &#91;liste Cleanup &#36;in &#36;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 &#123;in out chunk bytes &#123;error &#123;}}} &#123;<br>
global total done<br>
incr total &#36; bytes<br>
if &#123;(&#91;string length &#36;error] != 0) || &#91;eof &#36;in] &#123;<br>
set done &#36;total<br>
close &#36;in<br>
close &#36;out<br>
} else &#123;<br>
fcopy &#36;in &#36;out -command &#91;list CopyMore &#36;in &#36;out &#36;chunk] &#92;<br>
-size &#36;chunk<br>
}<br>
}<br>
set in &#91;open &#36;file1]<br>
set out &#91;socket &#36;serveur &#36;port]<br>
set chunk 1024<br>
set total 0<br>
fcopy &#36;in &#36;out -command &#91;list CopyMore &#36;in &#36;out &#36;chunk] -size &#36;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>&nbsp;&nbsp;<A HREF="109.htm"><b>Pr<EFBFBD>c<EFBFBD>dent</b></A>&nbsp;&nbsp;<A HREF="111.htm"><b>Suivant</b></A>
</div>
</BODY></HTML>