[gambit-list] How do I create a pipeline of processes, as in shell?

Jussi Piitulainen jpiitula at ling.helsinki.fi
Sun Jan 27 16:48:07 EST 2013

In shell it is easy to run a program, and it is easy to chain programs
into a pipeline where each process writes to the following process.

In Gambit-C it appears to be easy to run a program and write to the
process and read from the process. I failed to find a way to specify
that the output of one process should be connected to the input of
another. I have found open-process, process-status. I have found some
discussions about running single processes.

How does one implement the following lines in Gambit-C?

$ sort infile | uniq -c | sort -nr
$ sort < infile | uniq -c | sort -nr > outfile

Is this non-trivial? I'm looking for something like the following, so
that those processes would wait for their input and proceed when it
becomes available.

(let ((p (pipe '(path: "sort" arguments: ("infile"))
               '(path: "uniq" arguments: ("-c"))
               '(path: "sort" arguments: ("-nr")))))
   (let* ((r1 (read-line p)) ...) ...))

(parameterize ((current-input-port (open-input-file "infile"))
               (current-output-port (open-output-file "outfile")))
      (pipe "sort" '(path: "uniq" arguments: ("-c")) ...)))

I'm _not_ looking for (string-append ...).

More information about the Gambit-list mailing list