在运行macOS 10.13 external-program
的旧机器上可以正常工作时,我再也无法使用它与外部进程通信。我可以开始该过程,但是一旦完成输入流,我就会得到一个
Couldn't write to #<SB-SYS:FD-STREAM for "descriptor 8" {1002A51593}>:
Broken pipe
错误。我在macOS 10.15上使用SBCL
1.5.9。如果我尝试使用Edi's book, p. 689中的示例,则会发生错误:
foo.c
#include <stdio.h>
int main (void) {
int c;
while ((c = getchar()) != EOF) {
putchar(c);
if (c == '\n')
fflush(stdout);
else
putchar(c);
}
return 0; }
使用gcc -o foo foo.c
进行编译,然后在REPL中进行编译:
CL-USER> (external-program:start "~/Desktop/foo" nil
:input :stream :output :stream)
#<SB-IMPL::PROCESS 1833 :RUNNING>
CL-USER> (defparameter *p* *)
*P*
CL-USER> (defparameter *in*
(external-program:process-input-stream *p*))
*IN*
CL-USER> (defparameter *out*
(external-program:process-output-stream *p*))
*OUT*
CL-USER> (format *in* "addressee~%")
NIL
CL-USER> (finish-output *in*)
; Evaluation aborted on #<SB-INT:BROKEN-PIPE "~@<~?~@[: ~2I~_~A~]~:>" {1002A57043}>.
有人知道macOS 10.15进行了哪些更改。会干扰进程间的通信吗?
编辑
如果我尝试在终端中运行foo
,则其行为确实与预期的一样:
➜ ./foo
abcdefg
aabbccddeeffgg