Unix/Linux Go Back    

OpenDarwin 7.2.1 - man page for fcopy (opendarwin section n)

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:   man
Select Man Page Set:       apropos Keyword Search (sections above)

fcopy(n)			      Tcl Built-In Commands				 fcopy(n)


       fcopy - Copy data from one channel to another.

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

       The  fcopy  command  copies  data  from	one  I/O  channel, inchan to another I/O channel,
       outchan.  The fcopy command leverages the buffering in the Tcl I/O system to  avoid  extra
       copies  and  to	avoid  buffering too much data in main memory when copying large files to
       slow destinations like network sockets.

       The fcopy command transfers data from inchan until end of file or  size	bytes  have  been
       transferred. If no -size argument is given, then the copy goes until end of file.  All the
       data read from inchan is copied to outchan.  Without the  -command  option,  fcopy  blocks
       until the copy is complete and returns the number of bytes written to outchan.

       The -command argument makes fcopy work in the background.  In this case it returns immedi-
       ately and the callback is invoked later when the copy completes.  The callback  is  called
       with  one  or  two  additional  arguments  that	indicates  how many bytes were written to
       outchan.  If an error occurred during the background copy,  the	second	argument  is  the
       error  string  associated  with the error.  With a background copy, it is not necessary to
       put inchan or outchan into non-blocking mode; the fcopy command takes care of  that  auto-
       matically.  However, it is necessary to enter the event loop by using the vwait command or
       by using Tk.

       You are not allowed to do other I/O operations with inchan or outchan during a  background
       fcopy.	If either inchan or outchan get closed while the copy is in progress, the current
       copy is stopped and the command callback is not made.  If inchan is closed, then all  data
       already queued for outchan is written out.

       Note  that  inchan  can become readable during a background copy.  You should turn off any
       fileevent handlers during a background copy so those handlers do not  interfere	with  the
       copy.  Any I/O attempted by a fileevent handler will get a "channel busy" error.

       Fcopy translates end-of-line sequences in inchan and outchan according to the -translation
       option for these channels.  See the manual entry for fconfigure for details on the -trans-
       lation  option.	 The  translations  mean that the number of bytes read from inchan can be
       different than the number of bytes written to outchan.  Only the number of  bytes  written
       to  outchan is reported, either as the return value of a synchronous fcopy or as the argu-
       ment to the callback for an asynchronous fcopy.

       Fcopy obeys the encodings configured for the channels. This means that the incoming  char-
       acters  are  converted  internally  first  UTF-8 and then into the encoding of the channel
       fcopy writes to. See the manual entry for fconfigure for details on the -encoding  option.
       No  conversion  is  done if both channels are set to encoding "binary". If only the output
       channel is set to encoding "binary" the system will write the internal  UTF-8  representa-
       tion of the incoming characters. If only the input channel is set to encoding "binary" the
       system will assume that the incoming bytes are valid UTF-8  characters  and  convert  them
       according  to  the  output  encoding.  The behaviour of the system for bytes which are not
       valid UTF-8 characters is undefined in this case.

       This first example shows how the callback gets passed the number of bytes transferred.  It
       also  uses  vwait  to put the application into the event loop.  Of course, this simplified
       example could be done without the command callback.  proc Cleanup  {in  out  bytes  {error
       {}}} {
	   global total
	   set total $bytes
	   close $in
	   close $out
	   if {[string length $error] != 0} {	   # error occurred during the copy
	   }  } set in [open $file1] set out [socket $server $port] fcopy $in $out -command [list
       Cleanup $in $out] vwait total

       The second example copies in chunks and tests for end of file in the command 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
	   }  }  set  in  [open $file1] set out [socket $server $port] set chunk 1024 set total 0
       fcopy $in $out -command [list CopyMore $in $out $chunk] -size $chunk vwait done

       eof(n), fblocked(n), fconfigure(n)

       blocking, channel, end of line, end of file, nonblocking, read, translation

Tcl					       8.0					 fcopy(n)
Unix & Linux Commands & Man Pages : ©2000 - 2018 Unix and Linux Forums

All times are GMT -4. The time now is 05:39 AM.