On 01/21/2018 12:31 PM, Edwin Watkeys wrote:

Hi all,

I'm trying to write a procedure that processes some input through a unix
utility. Open-input-output-pipe returns a bidirectional pipe that I can
both read and write to. However, there is no way that I can figure out to
tell the external process that input is complete, as there is no way to
determine the output port of the rw-port and therefore no way to close it.
Closing an rw-port closes both the read and write ports.

Open-input-output-port therefore seems useful for line-based external
processes but not for ones that function on the entirety of user input e.g.
wc and sort.

Is my analysis of the situation roughly accurate?

Regards,
Edwin

|
||Not pretty, but maybe use `open-output-pipe' and another `pipe' for the input.||
||
||(let* ((ppair (pipe))||
||       (pconn (car pipe))||
||       (iport (cdr pipe))||
||       (oport (open-output-pipe "cmd"))||
||       (save (current-input-port)))||
||  (dynamic-wind||
||    (lambda () (set-current-input-port! pconn))||
||    (lambda ()||
||      ;; write to iport, read from oport||
||      (close iport)||
||      ;; read stuff from oport||
||      (close oport))||
||    (lambda () (set-current-input-port! save))))||
|

Reply via email to