W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
File.open/2
返回了一個元組形如{:ok, pid}
:iex> {:ok, file} = File.open "hello", [:write]
{:ok, #PID<0.47.0>}
這是因?yàn)镮O模塊正在處理進(jìn)程(參見Elixir 進(jìn)程).當(dāng)你運(yùn)行IO.write(pid, binary)
時,IO
模塊將根據(jù)pid
發(fā)送一個所需操作的信息給進(jìn)程.讓我們來看看自己設(shè)定進(jìn)程時會發(fā)生什么:
iex> pid = spawn fn ->
...> receive do: (msg -> IO.inspect msg)
...> end
#PID<0.57.0>
iex> IO.write(pid, "hello")
{:io_request, #PID<0.41.0>, #Reference<0.0.8.91>, {:put_chars, :unicode, "hello"}}
** (ErlangError) erlang error: :terminated
在IO.write/2
之后,我們看到IO
模塊發(fā)送了的請求(一個四元素元組)打印了出來.之后,我們看到它失敗了,原因是我們沒有提供IO
模塊期待的某種結(jié)果.
StringIO
模塊提供了IO
設(shè)備信息中字符串的操作:
iex> {:ok, pid} = StringIO.open("hello")
{:ok, #PID<0.43.0>}
iex> IO.read(pid, 2)
"he"
通過用進(jìn)程模型化了的IO設(shè)備,Erlang虛擬機(jī)允許同一個網(wǎng)絡(luò)中的不同節(jié)點(diǎn)可以交換文件進(jìn)程,以此來在不同的節(jié)點(diǎn)間讀寫文件.在所有IO設(shè)備之中,有一個與眾不同的進(jìn)程:群首領(lǐng).
當(dāng)你寫入到:stdio
,你實(shí)際上是在發(fā)送一個信息給群首領(lǐng),它會寫入到標(biāo)準(zhǔn)輸出文件中:
iex> IO.puts :stdio, "hello"
hello
:ok
iex> IO.puts Process.group_leader, "hello"
hello
:ok
群首領(lǐng)可以由單個進(jìn)程配置而成,并可用于不同的情形.例如,當(dāng)在遠(yuǎn)程終端中執(zhí)行代碼時,它可以保證在遠(yuǎn)程節(jié)點(diǎn)中的信息被重定向并打印在觸發(fā)請求的終端中.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: