我的雲端生活網 - Life+

Monday, December 28, 2009

Erlang 叫用外部程式很簡單

多行程程式是 Erlang 語言的一項重要特色。而許多時候需要叫用外部程式, Erlang 的程式寫法也表現得很優秀。

由於標榜 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 program
my $buffer;
$buffer = readline STDIN;
print $buffer

Erlang port_command/2 可以指定 port 並送訊息。例如:

port_command(Port1, "hello!\n")

simple_work 送出 port 的訊息, Erlang 程式要用 receive 接受訊息,收到的訊息格式依 open_port/2 的選項決定。

參考資料

No comments:

Blog Archive