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}。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。