写入Erlang中的随机访问文件

时间:2010-10-28 23:19:24

标签: erlang binaryfiles

如何在收到一定数量的数据后写入文件?

我知道文件可以打开,然后可以使用file:pwrite(Position,Bin)写入。

我想知道的是,如果数据是正在下载并需要写入文件。如何有效地做到这一点?例如使用缓冲区(如何写入缓冲区?)

此外,文件是否一直保持打开状态,直到下载完成或者每次到达缓冲区并且需要写入数据时它是否打开?

由于

3 个答案:

答案 0 :(得分:2)

如果您希望erlang为您缓存文件写入,则可以使用{delayed_write, Size, Delay}选项打开文件。然后你可以随心所欲io:write,当缓冲区达到Size字节或Delay毫秒后,VM将负责将这些请求批量处理到一个OS写入调用中因为缓冲区开始填满。

这种方法允许您在每次从网络接收数据时发出io:write个调用,但知道您不会为每个字节发出系统调用(如果您确实遇到了病态网络行为)。

答案 1 :(得分:1)

最有效的方法是将数据附加到内存缓冲区(IO列表?)并在一次操作中将其写入文件。如果您希望打开文件并写入每个数据块,则可以在append模式下打开该文件:

> file:write_file(FileName, DataToWrite, [append]).

每次写入都会将数据附加到文件的末尾。

答案 2 :(得分:0)

我认为file:pwrite/3符合您的需求。