當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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