由於標榜 Concurrency-Oriented Programming , Erlang 讓開發者將每一個函數視為行程。行程要與其他行程溝通,必須藉由拋接訊息來表示請求或回應。 Erlang 程式的訊息介面與 ! (send) 和 receive 兩個關鍵字有關。而外部程式的訊息介面,則稱為 port 。 Erlang 對 port 送訊息給外部程式,也從 port 接收外部程式來的訊息。 Erlang 的 open_port/2 提供了外部程式叫用的功能,並且提供了外部程式的 port 設定方式。例如:
Port1 = open_port( {spawn, simple_work}, [in, out, use_stdio] )
以上 port 的選項, in 容許 simple_work 外部程式可以從 port 接受輸入訊息, out 容許外部程式可以從 port 輸出訊息, use_stdio 指定外部程式的標準輸入和輸出分別對應為 port 輸入和 port 輸出。 simple_work 可能是以下 perl 程式:
#!/usr/bin/perl -w# simple_work programmy $buffer;$buffer = readline STDIN;print $buffer
Erlang port_command/2 可以指定 port 並送訊息。例如:
port_command(Port1, "hello!\n")
simple_work 送出 port 的訊息, Erlang 程式要用 receive 接受訊息,收到的訊息格式依 open_port/2 的選項決定。
參考資料
- Erlang 參考手冊 open_port/2 說明:
http://ftp.sunet.se/pub/lang/erlang/doc/man/erlang.html#open_port-2
No comments:
Post a Comment