Input 如何在Erlang中刷新io缓冲区?

Input 如何在Erlang中刷新io缓冲区?,input,erlang,buffer,flush,Input,Erlang,Buffer,Flush,如何在Erlang中刷新io缓冲区 例如: > io:format("hello"), > io:format(user, "hello"). 似乎表明没有干净的溶液 有比这篇文章更好的解决方案吗?遗憾的是,除了在io/内核子系统中正确地实现刷新“命令”并确保实现实际io的低级驱动程序支持这样的命令之外,您真的只需在关闭前依靠系统停止。我认为这是一个失败 请查看stdlib中的io.erl/io_lib.erl和内核中的file_io_ser

如何在Erlang中刷新io缓冲区

例如:

> io:format("hello"),
> io:format(user, "hello").
似乎表明没有干净的溶液


有比这篇文章更好的解决方案吗?

遗憾的是,除了在io/内核子系统中正确地实现刷新“命令”并确保实现实际io的低级驱动程序支持这样的命令之外,您真的只需在关闭前依靠系统停止。我认为这是一个失败

请查看stdlib中的io.erl/io_lib.erl和内核中的file_io_server.erl/prim_file.erl,了解详细信息

例如,在file_io_server(有效地从io/io_库获取请求并将其路由到正确的驱动程序)中,命令类型如下:

{put_chars,Chars}
{get_until,...}
{get_chars,...}
{get_line,...}
{setopts, ...}
(即不冲水)

作为替代方案,您当然可以在每次写入后关闭输出(这将强制刷新)。我有一个日志模块,每次都做类似的事情,它看起来并没有那个么慢(它是一个gen_服务器,通过cast消息接收日志):

你可以跑

flush().
从外壳中取出,或者尝试

flush()->
receive
    _ -> flush()
after 0 -> ok
end.
它的工作原理或多或少类似于C刷新。

io:put\u chars()
io:put_chars(<<>>)

最后,脚本对我很有用。

对不起,我没有答案,只有一个问题。我非常好奇为什么要刷新io缓冲区,所以;为什么?:)AFAIK当前的io服务器实现是不可能的。您的链接已断开,但这一链接指的是由于缺少刷新操作而导致的问题:我从来没有这样做过,但据我所知,实现io服务器并没有那么复杂,特别是当您可以将io_lib用于一些更复杂的请求时。我认为您已经了解了文件模块的一些内容,使用file:sync/1调用可以显式同步输出。除非将其绑定到io:nl(io)请求,否则不会使用io调用,而是使用自定义消息。这会刷新进程邮箱而不是io缓冲区。@Fonz,我建议删除您的答案,因为它与io:nl(io)请求无关,请小心!
io:put_chars(<<>>)