在macOS 10.15上使用外部程序时出现问题

时间:2019-12-16 18:59:43

标签: macos common-lisp sbcl macos-catalina

在运行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; }

使用external-program

使用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 

0 个答案:

没有答案