Io C printf打印的文本在哪里

Io C printf打印的文本在哪里,io,common-lisp,cffi,Io,Common Lisp,Cffi,我在通过cffi从SBCL调用C printf函数时遇到了一个问题。问题是当我调用printf函数时,我找不到输出文本,只有printf函数的返回值显示在REPL上。但当我退出SBCL时,输出文本神奇地出现在终端上 $ sbcl * (ql:quickload :cffi) * (cffi:foreign-funcall "printf" :string "hello" :int) ;;=> 5 * (quit) hello$ 最后一行hello$表示从SBCL

我在通过cffi从SBCL调用C printf函数时遇到了一个问题。问题是当我调用printf函数时,我找不到输出文本,只有printf函数的返回值显示在REPL上。但当我退出SBCL时,输出文本神奇地出现在终端上

  $ sbcl
  * (ql:quickload :cffi)
  * (cffi:foreign-funcall "printf" :string "hello" :int)
  ;;=> 5
  * (quit)
  hello$ 
最后一行hello$表示从SBCL退出时,文本hello出现在终端上,后跟shell提示符$。那么printf在哪里打印文本hello to


我试过在*standard output*上使用'finish output','force output',但这不起作用。

问题是C的stdio库有自己的缓冲区,与Lisp无关。刷新输出需要有一个指向C的FILE*stdout变量的指针。您可以按如下方式获取此指针:

 (cffi:defcvar ("stdout" stdout) :pointer)
然后,在使用printf之后:


问题是C的stdio库有自己的缓冲区,与Lisp无关。刷新输出需要有一个指向C的FILE*stdout变量的指针。您可以按如下方式获取此指针:

 (cffi:defcvar ("stdout" stdout) :pointer)
然后,在使用printf之后:


通常情况下,输出是缓冲的,您需要告诉C清空缓冲区。通常情况下,输出是缓冲的,您需要告诉C清空缓冲区。在适用于MacOS的SBCL 2.0.11中,这对我不起作用。尝试访问未定义的外部变量stdout时收到错误消息。。还有其他人吗?在MacOS的SBCL 2.0.11中对我不起作用。尝试访问未定义的外部变量stdout时收到错误消息。。还有其他人吗?