> 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