From: Pascal J.B. <pj...@in...> - 2004-10-22 08:23:56
|
The documentation of MAKE-STREAM says: The handle is duplicated (with dup/dup2), so it is safe to CLOSE a STREAM returned by EXT:MAKE-STREAM. But: (defun make-unix-pipe (&key (element-type 'character) (external-format CUSTOM:*FOREIGN-ENCODING*) (buffered t)) (multiple-value-bind (res fds) (linux:|pipe|) (unless (= 0 res) (error "unix pipe: ~A" (linux:|strerror| (linux:|errno|)))) (let ((inp (ext:make-stream (aref fds 0) :direction :input :element-type element-type :external-format external-format :buffered buffered)) (out (ext:make-stream (aref fds 1) :direction :output :element-type element-type :external-format external-format :buffered buffered))) (print (list (aref fds 0) inp (aref fds 1) out)) (linux:|close| (aref fds 0)) (linux:|close| (aref fds 1)) (values inp out))));;make-unix-pipe [5]> (make-unix-pipe) (4 #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/dev/fd/4" @1> 5 #<OUTPUT BUFFERED FILE-STREAM CHARACTER #P"/dev/fd/5">) #<INPUT BUFFERED FILE-STREAM CHARACTER #P"/dev/fd/4" @1> ; #<OUTPUT BUFFERED FILE-STREAM CHARACTER #P"/dev/fd/5"> does not seem to have duped the file descriptor, and indeed, using the returned stream after having closed the original fds does not work... Unfortunately, removing the linux:|close| calls won't change anything because pipe I/O doesn't seem to work anyway (cf my message about write-helper). -- __Pascal Bourguignon__ http://www.informatimago.com/ Voting Democrat or Republican is like choosing a cabin in the Titanic. |
From: Sam S. <sd...@gn...> - 2004-10-22 17:39:25
|
> * Pascal J.Bourguignon <cwo@vasbezngvzntb.pbz> [2004-10-22 10:23:24 +0200]: > > The documentation of MAKE-STREAM says: > > The handle is duplicated (with dup/dup2), so it is safe to CLOSE a > STREAM returned by EXT:MAKE-STREAM. fixed the code to comply with the spec. thanks. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> Isn't "Microsoft Works" an advertisement lie? |