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))))||
|