[Openmcl-devel] Transfer the contents of a file to a tcp stream

Christian Nybø chr at nybo.no
Wed Jul 13 09:25:11 PDT 2005


Hello,

A function written in platform-independent CL barfs at times in
input-file-ioblock-advance.  Seems there are times when a read- 
sequence returns less than what it's asked
for, and this mismatch is detected by the advance function.  I have  
tried to narrow this down to an example where we copy the contents of  
a file to another file, and set up lots of processes that each have  
such a separate task.

With a directory "/Users/chr/Sites/formula/drobak/07-Images/"  
containing some images, I can provoke the error by doing the  
following. This is with ccl::*MULTIPROCESSING-SOCKET-IO* set to nil,  
when it is set to t, similar errors are reported by CCL::OUTPUT-FILE- 
FORCE-OUTPUT:

(defun stream-file (in out)
     "Copy from pathname <in> to pathname <out>."
     (with-open-file (is in :element-type '(unsigned-byte 8))
       (with-open-file (os out
                    :direction :output
                    :if-exists :overwrite
                    :if-does-not-exist :create
                    :element-type '(unsigned-byte 8))
         (loop with buffer-size = 2048
           with buffer = (make-array buffer-size :element-type  
'(unsigned-byte 8))
              for nread = (read-sequence buffer is)
              do (write-sequence buffer os :end nread)
              while (= nread buffer-size)))))

(defun stream-file-process (pathname)
   (process-run-function (format nil "slave-~A" (pathname-name  
pathname))
                 #'stream-file pathname (pathname
                     (format nil "/tmp/foo.~A"
                         (pathname-name pathname)))))

(defun stream-file-process-directory (wild-pathname)
   (mapcar #'stream-file-process
       (directory wild-pathname)))

(defparameter *directory-with-certain-files*
   #P"/Users/chr/Sites/formula/drobak/07-Images/*.jpg")

;; this one has trouble in input-file-ioblock-advance
(setf ccl::*MULTIPROCESSING-SOCKET-IO* nil)
(stream-file-process-directory *directory-with-certain-files*)

;; Could some of you alter *directory-with-certain-files*
;; and report back on whether this works on your systems?

Thanks,
-- 
chr

-- 
chr




More information about the Openmcl-devel mailing list