Subject: Re: Lisp io performance.
From: Erik Naggum <erik@naggum.no>
Date: 1999/01/19
Newsgroups: comp.lang.lisp
Message-ID: <3125763790062135@naggum.no>
* Barry Margolin <barmar@bbnplanet.com>
| BTW, stylistic note: any time a number outside the range -1:1, e.g. 8192,
| appears multiple times in a piece of code, it's probably a candidate for
| a DEFCONSTANT. In the case of this function, DEFPARAMETER might be more
| appropriate, so you can experiment with different size buffers simply by
| changing the value (for those of you who have wondered, this is where
| DEFPARAMETER gets its name).
in this case, I think it's also worth pointing out that the size of the
string is still available. (length buffer) will yield 8192.
FWIW, here's my cut at it:
(defconstant disk-block-size 8192)
(defun copy-file (from to)
(with-open-file (in from :direction :input)
(with-open-file (out to :direction :output :if-exists :supersde)
(let ((buffer (make-array disk-block-size
:element-type (stream-element-type in))))
(loop for read = (read-sequence buffer in) until (zerop read) do
(write-sequence buffer out :end read))))))
#:Erik
--
SIGTHTBABW: a signal sent from Unix to its programmers at random
intervals to make them remember that There Has To Be A Better Way.