当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang init(UserData :: user_data(), AccessMode :: write | read, Fun :: file_op())用法及代码示例


init(UserData :: user_data(),
     AccessMode :: write | read,
     Fun :: file_op()) ->
        {ok, tar_descriptor()} | {error, badarg}
OTP 17.4
类型:
user_data() =term()
file_op() =
fun((写|关闭|读2|位置,
{user_data(),iodata()} |
user_data() |
{user_data(),integer() >= 0} |
{user_data(),integer() >= 0})->
好的 |埃夫|
{好的,string()|binary()} |
{好的,integer() >= 0} |
{错误,term()})

Fun 定义了当从更高的 tar 处理函数(例如 add/3add/4close/1 )调用不同的存储操作函数时要执行的操作。

当 tar 函数想要执行低级操作(例如将块写入文件)时,将调用 FunFun 被称为 Fun(Op, {UserData,Parameters...}) ,其中 Op 是操作名称,UserData 是作为第一个参数传递给 init/1 的术语,Parameters... 是要传递的 tar 函数添加的数据到存储处理函数。

参数 UserData 通常是打开低级结构(如文件说明符或 SFTP 通道 ID)的结果。不同的 Fun 子句针对该术语进行操作。

以下是 fun 子句参数列表:


(write, {UserData,DataToWrite})

使用 UserData 写入术语 DataToWrite


(close, UserData)

关闭访问。


(read2, {UserData,Size})

使用UserData 读取,但仅使用Size 字节。请注意,只有 arity-2 读取函数,而不是 arity-1 函数。


(position,{UserData,Position})

设置位置UserData中的文件定义为 file:position/2

例子:

以下是完整的Fun使用参数读取和写入文件file模块:

ExampleFun = 
   fun(write, {Fd,Data}) ->  file:write(Fd, Data);
      (position, {Fd,Pos}) -> file:position(Fd, Pos);
      (read2, {Fd,Size}) -> file:read(Fd, Size);
      (close, Fd) -> file:close(Fd)
   end

这里 Fd 被指定为 init/3 函数:

{ok,Fd} = file:open(Name, ...).
{ok,TarDesc} = erl_tar:init(Fd, [write], ExampleFun),

然后使用TarDesc

erl_tar:add(TarDesc, SomeValueIwantToAdd, FileNameInTarFile),
...,
erl_tar:close(TarDesc)

例如,当 erl_tar 核心想要写入一段 Data 时,它会调用 ExampleFun(write, {UserData,Data})

注意

这个例子与file模块操作没必要直接使用,因为那是函数open/2原则上是这样。

警告

TarDescriptor 术语不是文件说明符。建议您不要依赖该术语的具体内容,因为当更多函数添加到该模块时,它可能会在未来的 Erlang/OTP 版本中发生变化。

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 init(UserData :: user_data(), AccessMode :: write | read, Fun :: file_op()) -> {ok, tar_descriptor()} | {error, badarg}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。