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}。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。