Io C printf打印的文本在哪里
我在通过cffi从SBCL调用C printf函数时遇到了一个问题。问题是当我调用printf函数时,我找不到输出文本,只有printf函数的返回值显示在REPL上。但当我退出SBCL时,输出文本神奇地出现在终端上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
$ 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时收到错误消息。。还有其他人吗?