5

Erlangでioバッファをどのようにフラッシュしますか?

例えば:

> io:format("hello"),
> io:format(user, "hello").

この投稿は、明確な解決策がないことを示しているようです。

その投稿よりも良い解決策はありますか?

4

3 に答える 3

5

悲しいことに、io/kernel サブシステムにフラッシュ「コマンド」を適切に実装し、実際の io を実装する低レベル ドライバーがそのようなコマンドをサポートしていることを確認する以外に、システムを閉じる前に静止状態に頼る必要があります。失敗だと思います。

詳細については、stdlib の io.erl/io_lib.erl とカーネルの file_io_server.erl/prim_file.erl を参照してください。

例として、file_io_server (これは io/io_lib から要求を効果的に取得し、正しいドライバーにルーティングします) では、コマンドの種類は次のとおりです。

{put_chars,Chars}
{get_until,...}
{get_chars,...}
{get_line,...}
{setopts, ...}

(つまり、フラッシュなし)!

別の方法として、もちろん、書き込みのたびに常に出力を閉じることができます (これにより、フラッシュが強制されます)。私が持っているログモジュールは毎回このようなことをしますが、それほど遅くはないようです (キャストメッセージを介してログを受信した gen_server です):

  case file:open(LogFile, [append]) of
    {ok, IODevice} ->
    io:fwrite(IODevice, "~n~2..0B ~2..0B ~4..0B, ~2..0B:~2..0B:~2..0B: ~-8s : ~-20s : ~12w : ",
          [Day, Month, Year, Hour, Minute, Second, Priority, Module, Pid]),
    io:fwrite(IODevice, Msg, Params),
    io:fwrite(IODevice, "~c", [13]),
    file:close(IODevice);
于 2009-08-16T04:25:42.943 に答える
0
io:put_chars(<<>>)

スクリプトの最後に私のために働きます。

于 2014-06-25T14:27:21.403 に答える
-5

あなたは走ることができました

flush().

シェルから、または試してください

flush()->
receive
    _ -> flush()
after 0 -> ok
end.

これは、多かれ少なかれ C フラッシュのように機能します。

于 2009-12-07T01:46:42.833 に答える