init(UserData :: user_data(),
AccessMode :: write | read,
Fun :: file_op()) ->
{ok, tar_descriptor()} | {error, badarg}
OTP 17.4fun((写|关闭|读2|位置,
{user_data(),iodata()} |
user_data() |
{user_data(),integer() >= 0} |
{user_data(),integer() >= 0})->
好的 |埃夫|
{好的,string()|binary()} |
{好的,integer() >= 0} |
{错误,term()})
Fun 定义了当从更高的 tar 处理函数(例如 add/3 、 add/4 和 close/1 )调用不同的存储操作函数时要执行的操作。
当 tar 函数想要执行低级操作(例如将块写入文件)时,将调用 Fun。 Fun 被称为 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 init(Q1 :: queue(Item))用法及代码示例
- erlang init_ack(Ret)用法及代码示例
- erlang insert_element(Index, Tuple1, Term)用法及代码示例
- erlang integer_to_binary(Integer)用法及代码示例
- erlang integer_to_binary(Integer, Base)用法及代码示例
- erlang integer_to_list(Integer)用法及代码示例
- erlang integer_to_list(Integer, Base)用法及代码示例
- erlang in(Item, Q1 :: queue(Item))用法及代码示例
- erlang in_r(Item, Q1 :: queue(Item))用法及代码示例
- erlang info()用法及代码示例
- erlang info_lib()用法及代码示例
- erlang inflateChunk(Z, Data)用法及代码示例
- erlang inflateSetDictionary(Z, Dictionary)用法及代码示例
- erlang intersect(Map1, Map2)用法及代码示例
- erlang intersect_with(Combiner, Map1, Map2)用法及代码示例
- erlang info_msg(Format)用法及代码示例
- erlang info_report(Report)用法及代码示例
- erlang inspect(MP, Item)用法及代码示例
- erlang intersection_of_family(Family)用法及代码示例
- erlang inverse(Function1)用法及代码示例
- erlang inverse_image(BinRel, Set1)用法及代码示例
- erlang info(QH)用法及代码示例
- erlang is_file用法及代码示例
- erlang is_dir用法及代码示例
- erlang is_atom用法及代码示例
注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 init(UserData :: user_data(), AccessMode :: write | read, Fun :: file_op()) -> {ok, tar_descriptor()} | {error, badarg}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。
