Understanding UIOP/RUN-PROGRAM

Stelian Ionescu sionescu at cddr.org
Tue Sep 29 15:16:08 UTC 2015


> In a potentially memory constrained environment, I need to portably
> (across sbcl and ccl at least) process a potentially large (multiple
> GiB) stream of bytes output from a Linux command.  For the curious,
> "process" here means encrypt with a block cipher and push to the
> network; whereas the UNIX command is the output of "btrfs send".
> 
> I wanted to confirm with ASDF developers that as far as I can tell from
> wrangling with UIOP:RUN-PROGRAM, it isn't going to do what I want
> because there is no "asynchronous" mode.  UIOP:RUN-PROGRAM cannot be
> "run in the background" like SBCL's SB-EXT:RUN-PROGRAM with :wait nil
> that allows the output of the sub-process to be gathered and processed
> in blocks.  So, it would always be the case that
> UIOP/RUN-PROGRAM::SLURP-INPUT-STREAM has "gone through" all the
> (potentially huge) output of the sub-process before UIOP:RUN-PROGRAM can
> return.

Yes, UIOP:RUN-PROGRAM is synchronous. For an asynchronous and portable function I suggest IOLIB/OS:CREATE-PROCESS.

-- 
Stelian Ionescu a.k.a. fe[nl]ix
Quidquid latine dictum sit, altum videtur.
http://common-lisp.net/project/iolib



More information about the asdf-devel mailing list