IO缓冲关闭

时间:2016-12-15 18:34:31

标签: common-lisp

从LISP调用的命令在缓冲IO流方面遇到问题,如何将其关闭?我发现只有冲洗功能,在这种情况下没有任何好处。

2 个答案:

答案 0 :(得分:4)

你不能那样做

没有可移植的方式来打开和关闭缓冲,并且有一个很好的理由:缓冲的i / o速度提高了几个数量级。

您不应该尝试这样做

你可能能够在你使用的实现中找到如何做到这一点,但这将是浪费时间 - 你很快就会意识到这是一个错误。请帮个忙,不要回溯我的步骤 - 差不多20年前我试过了。

有更好的方法

完成写作后,只需flush the output

您可以使用类或宏来封装它,这样就不会涉及其他类型。

出于多种原因

更好

请注意,我建议的方法将使您的代码更具可读性 - 它将要求您明确指定您的消息边界。 请记住,您为其他人(以及从现在起6个月后自己!)编写代码以进行读取,修改和调试。

答案 1 :(得分:0)

所以,我终于找到了问题(也许是bug ??)

表单看起来像这样(SBCL API)

(run-program "sudo" '("mv" "foo.txt" "/usr/bin")
    :search t
    :output t
    :input t
    :wait t)

这正是我想要的方式,问题是输入和输出args而不是t,我指定*standard-input**standard-output*导致命令不正确(如果被调用的程序需要一些输入来自像sudo这样的用户)。

不知道为什么,但至少它现在有效。