cffi を介して SBCL から C の printf 関数を呼び出す際に問題が発生しました。問題は、printf関数を呼び出すと、出力テキストが見つからず、REPLにprintf関数の戻り値が表示されるだけです。しかし、SBCL を終了すると、魔法のように出力テキストが端末に表示されます。
$ sbcl
* (ql:quickload :cffi)
* (cffi:foreign-funcall "printf" :string "hello" :int)
;;=> 5
* (quit)
hello$
最後の行 "hello$" は、SBCL を終了すると、テキスト "hello" が端末に表示され、その後にシェル プロンプト "$" が表示されることを意味します。では、printf はテキスト "hello" をどこに出力するのでしょうか?
*standard-output* で `finish-output'、`force-output' を試しましたが、うまくいきません。